From ee5e10dd8c1e76a4f36accaaa6def6384d12ae50 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Tue, 24 Aug 2021 17:11:41 +0900 Subject: [PATCH] actor serialiser --- .../torvald/terrarum/console/CommandDict.kt | 1 + .../modulebasegame/console/ExportMeta.kt | 33 +++++++++++++++++++ .../torvald/terrarum/serialise/WriteActor.kt | 33 +++++++++++++++++++ .../torvald/terrarum/serialise/WriteMeta.kt | 4 --- .../torvald/terrarum/serialise/WriteWorld.kt | 5 --- 5 files changed, 67 insertions(+), 9 deletions(-) create mode 100644 src/net/torvald/terrarum/serialise/WriteActor.kt diff --git a/src/net/torvald/terrarum/console/CommandDict.kt b/src/net/torvald/terrarum/console/CommandDict.kt index 127cf7260..308bfb14f 100644 --- a/src/net/torvald/terrarum/console/CommandDict.kt +++ b/src/net/torvald/terrarum/console/CommandDict.kt @@ -61,6 +61,7 @@ object CommandDict { /* !! */"exportmeta" to ExportMeta, /* !! */"exportworld" to ExportWorld, + /* !! */"exportactor" to ExportActor, /* !! */"importlayer" to ImportLayerData, /* !! */"exportfborgb" to ExportRendererFboRGB ) diff --git a/src/net/torvald/terrarum/modulebasegame/console/ExportMeta.kt b/src/net/torvald/terrarum/modulebasegame/console/ExportMeta.kt index 035715a8e..ae316a391 100644 --- a/src/net/torvald/terrarum/modulebasegame/console/ExportMeta.kt +++ b/src/net/torvald/terrarum/modulebasegame/console/ExportMeta.kt @@ -6,6 +6,7 @@ import net.torvald.terrarum.Terrarum import net.torvald.terrarum.console.ConsoleCommand import net.torvald.terrarum.console.Echo import net.torvald.terrarum.modulebasegame.TerrarumIngame +import net.torvald.terrarum.serialise.WriteActor import net.torvald.terrarum.serialise.WriteMeta import net.torvald.terrarum.serialise.WriteWorld import net.torvald.terrarum.utils.JsonWriter @@ -53,4 +54,36 @@ object ExportWorld : ConsoleCommand { override fun printUsage() { Echo("Usage: Exportworld") } +} + +object ExportActor : ConsoleCommand { + override fun execute(args: Array) { + if (args.size == 2) { + try { + val player = (Terrarum.ingame!! as TerrarumIngame).actorNowPlaying + if (player == null) return + + val str = WriteActor(player) + val writer = java.io.FileWriter(AppLoader.defaultDir + "/Exports/${args[1]}.json", false) + writer.write(str) + writer.close() + + Echo("Exportactor: exported to ${args[1]}.json") + } + catch (e: IOException) { + Echo("Exportactor: IOException raised.") + e.printStackTrace() + } + + } + else { + printUsage() + } + } + + override fun printUsage() { + Echo("Export Actor as JSON format.") + Echo("Usage: exportactor (id) filename-without-extension") + Echo("blank ID for player") + } } \ No newline at end of file diff --git a/src/net/torvald/terrarum/serialise/WriteActor.kt b/src/net/torvald/terrarum/serialise/WriteActor.kt new file mode 100644 index 000000000..9cd4821ee --- /dev/null +++ b/src/net/torvald/terrarum/serialise/WriteActor.kt @@ -0,0 +1,33 @@ +package net.torvald.terrarum.serialise + +import com.badlogic.gdx.utils.Json +import com.badlogic.gdx.utils.JsonValue +import com.badlogic.gdx.utils.JsonWriter +import net.torvald.terrarum.gameactors.Actor +import java.math.BigInteger + +/** + * Created by minjaesong on 2021-08-24. + */ +object WriteActor { + + private val jsoner = Json(JsonWriter.OutputType.json) + + // install custom (de)serialiser + init { + jsoner.setSerializer(BigInteger::class.java, object : Json.Serializer { + override fun write(json: Json, obj: BigInteger?, knownType: Class<*>?) { + json.writeValue(obj?.toString()) + } + + override fun read(json: Json, jsonData: JsonValue, type: Class<*>?): BigInteger { + return BigInteger(jsonData.asString()) + } + }) + } + + operator fun invoke(actor: Actor): String { + return jsoner.toJson(actor) + } + +} \ No newline at end of file diff --git a/src/net/torvald/terrarum/serialise/WriteMeta.kt b/src/net/torvald/terrarum/serialise/WriteMeta.kt index 499b0e764..4763668c0 100644 --- a/src/net/torvald/terrarum/serialise/WriteMeta.kt +++ b/src/net/torvald/terrarum/serialise/WriteMeta.kt @@ -1,11 +1,7 @@ package net.torvald.terrarum.serialise -import com.badlogic.gdx.utils.Json -import com.badlogic.gdx.utils.JsonValue -import com.badlogic.gdx.utils.JsonWriter import com.badlogic.gdx.utils.compression.Lzma import net.torvald.terrarum.ModMgr -import net.torvald.terrarum.gameworld.BlockLayer import net.torvald.terrarum.modulebasegame.TerrarumIngame import net.torvald.terrarum.modulebasegame.worldgenerator.RoguelikeRandomiser import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.ByteArray64GrowableOutputStream diff --git a/src/net/torvald/terrarum/serialise/WriteWorld.kt b/src/net/torvald/terrarum/serialise/WriteWorld.kt index 6674a409b..0cc7207e3 100644 --- a/src/net/torvald/terrarum/serialise/WriteWorld.kt +++ b/src/net/torvald/terrarum/serialise/WriteWorld.kt @@ -1,11 +1,6 @@ package net.torvald.terrarum.serialise -import com.badlogic.gdx.utils.Json -import com.badlogic.gdx.utils.JsonWriter -import net.torvald.terrarum.gameworld.BlockLayer import net.torvald.terrarum.modulebasegame.TerrarumIngame -import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.ByteArray64GrowableOutputStream -import java.util.zip.GZIPOutputStream /** * Created by minjaesong on 2021-08-23.