much simpler way of composing savegame.json

This commit is contained in:
minjaesong
2021-08-24 11:29:21 +09:00
parent dd51cfbe52
commit 67091d0c84
5 changed files with 57 additions and 64 deletions

View File

@@ -59,7 +59,7 @@ object CommandDict {
"spawnlunarlander" to SpawnPhysTestLunarLander, "spawnlunarlander" to SpawnPhysTestLunarLander,
"savetest" to SavegameWriterTest, "savetest" to SavegameWriterTest,
/* !! */"exportlayer" to ExportLayerData, /* !! */"exportmeta" to ExportMeta,
/* !! */"importlayer" to ImportLayerData, /* !! */"importlayer" to ImportLayerData,
/* !! */"exportfborgb" to ExportRendererFboRGB /* !! */"exportfborgb" to ExportRendererFboRGB
) )

View File

@@ -295,7 +295,6 @@ open class ActorWithBody(renderOrder: RenderOrder, val physProp: PhysProperties,
@Transient private var assertPrinted = false @Transient private var assertPrinted = false
// debug only
internal var walledLeft = false internal var walledLeft = false
internal var walledRight = false internal var walledRight = false
internal var walledTop = false // UNUSED; only for BasicDebugInfoWindow internal var walledTop = false // UNUSED; only for BasicDebugInfoWindow

View File

@@ -13,22 +13,22 @@ import java.io.IOException
/** /**
* Created by minjaesong on 2017-07-18. * Created by minjaesong on 2017-07-18.
*/ */
object ExportLayerData : ConsoleCommand { object ExportMeta : ConsoleCommand {
override fun execute(args: Array<String>) { override fun execute(args: Array<String>) {
try { try {
val str = WriteMeta(Terrarum.ingame!! as TerrarumIngame).invoke() val str = WriteMeta(Terrarum.ingame!! as TerrarumIngame).invoke()
val writer = java.io.FileWriter(AppLoader.defaultDir + "/Exports/savegame.json", false) val writer = java.io.FileWriter(AppLoader.defaultDir + "/Exports/savegame.json", false)
writer.write(str) writer.write(str)
writer.close() writer.close()
Echo("Exportlayer: exported to savegame.json") Echo("Exportmeta: exported to savegame.json")
} }
catch (e: IOException) { catch (e: IOException) {
Echo("Exportlayer: IOException raised.") Echo("Exportmeta: IOException raised.")
e.printStackTrace() e.printStackTrace()
} }
} }
override fun printUsage() { override fun printUsage() {
Echo("Usage: exportlayer") Echo("Usage: Exportmeta")
} }
} }

View File

@@ -127,8 +127,8 @@ open class ActorHumanoid(
internal var walkCounterY = 0 internal var walkCounterY = 0
@Transient private val MAX_JUMP_LENGTH = 25 // manages "heaviness" of the jump control. Higher = heavier @Transient private val MAX_JUMP_LENGTH = 25 // manages "heaviness" of the jump control. Higher = heavier
private var readonly_totalX = 0.0 @Transient private var readonly_totalX = 0.0
private var readonly_totalY = 0.0 @Transient private var readonly_totalY = 0.0
internal var jumping = false internal var jumping = false
@@ -531,11 +531,11 @@ open class ActorHumanoid(
return pwr * timedJumpCharge * JUMP_ACCELERATION_MOD * Math.sqrt(scale) // positive value return pwr * timedJumpCharge * JUMP_ACCELERATION_MOD * Math.sqrt(scale) // positive value
} }
private var oldMAX_JUMP_LENGTH = -1 // init @Transient private var oldMAX_JUMP_LENGTH = -1 // init
private var oldJUMPPOWER = -1.0 // init @Transient private var oldJUMPPOWER = -1.0 // init
private var oldJUMPPOWERBUFF = -1.0 // init @Transient private var oldJUMPPOWERBUFF = -1.0 // init
private var oldScale = -1.0 @Transient private var oldScale = -1.0
private var oldDragCoefficient = -1.0 @Transient private var oldDragCoefficient = -1.0
// used by some AIs // used by some AIs
var jumpAirTime: Double = -1.0 var jumpAirTime: Double = -1.0
get() { get() {

View File

@@ -1,6 +1,7 @@
package net.torvald.terrarum.serialise package net.torvald.terrarum.serialise
import com.badlogic.gdx.utils.Json import com.badlogic.gdx.utils.Json
import com.badlogic.gdx.utils.JsonValue
import com.badlogic.gdx.utils.JsonWriter import com.badlogic.gdx.utils.JsonWriter
import net.torvald.terrarum.ModMgr import net.torvald.terrarum.ModMgr
import net.torvald.terrarum.gameworld.BlockLayer import net.torvald.terrarum.gameworld.BlockLayer
@@ -18,58 +19,51 @@ open class WriteMeta(val ingame: TerrarumIngame) {
open fun invoke(): String { open fun invoke(): String {
val world = ingame.world val world = ingame.world
val props = hashMapOf<String, Any>( val json = """{
"genver" to 4, "genver": 4,
"savename" to world.worldName, "savename": "${world.worldName}",
"terrseed" to world.generatorSeed, "terrseed": ${world.generatorSeed},
"randseed0" to RoguelikeRandomiser.RNG.state0, "randseed0": ${RoguelikeRandomiser.RNG.state0},
"randseed1" to RoguelikeRandomiser.RNG.state1, "randseed1": ${RoguelikeRandomiser.RNG.state1},
"weatseed0" to WeatherMixer.RNG.state0, "weatseed0": ${WeatherMixer.RNG.state0},
"weatseed1" to WeatherMixer.RNG.state1, "weatseed1": ${WeatherMixer.RNG.state1},
"playerid" to ingame.theRealGamer.referenceID, "playerid": ${ingame.theRealGamer.referenceID},
"creation_t" to world.creationTime, "creation_t": ${world.creationTime},
"lastplay_t" to world.lastPlayTime, "lastplay_t": ${world.lastPlayTime},
"playtime_t" to world.totalPlayTime, "playtime_t": ${world.totalPlayTime},
"blocks": "${StringBuilder().let {
// CSVs ModMgr.getFilesFromEveryMod("blocks/blocks.csv").forEach { (modname, file) ->
"blocks" to StringBuilder().let { it.append("\n\n## module: $modname ##\n\n")
ModMgr.getFilesFromEveryMod("blocks/blocks.csv").forEach { (modname, file) -> it.append(file.readText())
it.append("\n\n## module: $modname ##\n\n") }
it.append(file.readText()) bytesToZipdStr(it.toString().toByteArray())
} }}",
bytesToZipdStr(it.toString().toByteArray()) "items": "${StringBuilder().let {
}, ModMgr.getFilesFromEveryMod("items/itemid.csv").forEach { (modname, file) ->
it.append("\n\n## module: $modname ##\n\n")
"items" to StringBuilder().let { it.append(file.readText())
ModMgr.getFilesFromEveryMod("items/itemid.csv").forEach { (modname, file) -> }
it.append("\n\n## module: $modname ##\n\n") bytesToZipdStr(it.toString().toByteArray())
it.append(file.readText()) }}",
} "wires": "${StringBuilder().let {
bytesToZipdStr(it.toString().toByteArray()) ModMgr.getFilesFromEveryMod("wires/wires.csv").forEach { (modname, file) ->
}, it.append("\n\n## module: $modname ##\n\n")
it.append(file.readText())
"wires" to StringBuilder().let { }
ModMgr.getFilesFromEveryMod("wires/wires.csv").forEach { (modname, file) -> bytesToZipdStr(it.toString().toByteArray())
it.append("\n\n## module: $modname ##\n\n") }}",
it.append(file.readText()) "materials": "${StringBuilder().let {
} ModMgr.getFilesFromEveryMod("materials/materials.csv").forEach { (modname, file) ->
bytesToZipdStr(it.toString().toByteArray()) it.append("\n\n## module: $modname ##\n\n")
}, it.append(file.readText())
}
// TODO fluids bytesToZipdStr(it.toString().toByteArray())
"materials" to StringBuilder().let { }}",
ModMgr.getFilesFromEveryMod("materials/materials.csv").forEach { (modname, file) -> "loadorder": [${ModMgr.loadOrder.map { "\"${it}\"" }.joinToString()}],
it.append("\n\n## module: $modname ##\n\n") "worlds": [${ingame.gameworldIndices.joinToString()}]
it.append(file.readText()) }"""
}
bytesToZipdStr(it.toString().toByteArray())
},
"loadorder" to ModMgr.loadOrder,
"worlds" to ingame.gameworldIndices
)
return Json(JsonWriter.OutputType.json).toJson(props) return json
} }
/** /**