mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-07 20:31:51 +09:00
Former-commit-id: f924467637c8e34ecc9b2ffd00b343253c40aaf7 Former-commit-id: 7779de4420c27e06ee17e8576b643c366d434ef8
79 lines
2.5 KiB
Kotlin
79 lines
2.5 KiB
Kotlin
package com.torvald.serialise
|
|
|
|
import com.torvald.terrarum.gamemap.GameMap
|
|
import com.torvald.terrarum.Terrarum
|
|
import java.io.IOException
|
|
import java.nio.file.Files
|
|
import java.nio.file.Path
|
|
import java.nio.file.Paths
|
|
import java.nio.file.StandardCopyOption
|
|
|
|
/**
|
|
* Created by minjaesong on 16-03-18.
|
|
*/
|
|
object WriteGameMapData {
|
|
|
|
val META_FILENAME = "worldinfo1"
|
|
|
|
val MAGIC: ByteArray = byteArrayOf(
|
|
'T'.toByte(),
|
|
'E'.toByte(),
|
|
'M'.toByte(),
|
|
'D'.toByte()
|
|
)
|
|
|
|
val BYTE_NULL: Byte = 0
|
|
|
|
|
|
fun write(saveDirectoryName: String): Boolean {
|
|
val path = Paths.get("${Terrarum.defaultSaveDir}" +
|
|
"/$saveDirectoryName/${WriteMeta.META_FILENAME}")
|
|
val tempPath = Files.createTempFile(path.toString(), "_temp")
|
|
val map = Terrarum.game.map
|
|
|
|
// TODO gzip
|
|
|
|
// write binary
|
|
Files.write(tempPath, MAGIC)
|
|
Files.write(tempPath, byteArrayOf(GameMap.BITS))
|
|
Files.write(tempPath, byteArrayOf(GameMap.LAYERS))
|
|
Files.write(tempPath, byteArrayOf(BYTE_NULL))
|
|
Files.write(tempPath, byteArrayOf(BYTE_NULL))
|
|
Files.write(tempPath, toByteArray(map.width))
|
|
Files.write(tempPath, toByteArray(map.height))
|
|
Files.write(tempPath, toByteArray(map.spawnX))
|
|
Files.write(tempPath, toByteArray(map.spawnY))
|
|
map.layerTerrain.forEach(
|
|
{b -> Files.write(tempPath, byteArrayOf(b))})
|
|
map.layerWall.forEach(
|
|
{b -> Files.write(tempPath, byteArrayOf(b))})
|
|
map.terrainDamage.forEach(
|
|
{b -> Files.write(tempPath, byteArrayOf(b))})
|
|
map.wallDamage.forEach(
|
|
{b -> Files.write(tempPath, byteArrayOf(b))})
|
|
map.layerWire.forEach(
|
|
{b -> Files.write(tempPath, byteArrayOf(b))})
|
|
|
|
// replace savemeta with tempfile
|
|
try {
|
|
Files.copy(tempPath, path, StandardCopyOption.REPLACE_EXISTING)
|
|
Files.deleteIfExists(tempPath)
|
|
println("Saved map data '$META_FILENAME' to $saveDirectoryName.")
|
|
|
|
return true
|
|
}
|
|
catch (e: IOException) {
|
|
e.printStackTrace()
|
|
}
|
|
return false
|
|
}
|
|
|
|
fun toByteArray(int: Int): ByteArray {
|
|
return byteArrayOf(
|
|
((int ushr 0x18) and 0xFF).toByte(),
|
|
((int ushr 0x10) and 0xFF).toByte(),
|
|
((int ushr 0x08) and 0xFF).toByte(),
|
|
((int ) and 0xFF).toByte()
|
|
)
|
|
}
|
|
} |