Files
Terrarum/src/net/torvald/serialise/WriteGameMapData.kt
Song Minjae 186d6a8cb9 monitor adjustment screen, changed "calibrate" to "adjust" (NOT the STRING_ID of langpack)
Former-commit-id: ffae41e5876e54e2e0aedb5a93092db8e8f75d01
Former-commit-id: 65883b385a205d47b76c60f18a91186c2be922b2
2016-07-06 20:17:51 +09:00

79 lines
2.5 KiB
Kotlin

package net.torvald.serialise
import net.torvald.terrarum.gamemap.GameMap
import net.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.ingame.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()
)
}
}