From 93abfe05a618eb0baa720f659db9833ab74f2c1e Mon Sep 17 00:00:00 2001 From: minjaesong Date: Mon, 23 Aug 2021 17:52:53 +0900 Subject: [PATCH] writeworld wip --- .../torvald/terrarum/serialise/WriteMeta.kt | 7 ++- .../torvald/terrarum/serialise/WriteWorld.kt | 48 +++++++++++++++++++ 2 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 src/net/torvald/terrarum/serialise/WriteWorld.kt diff --git a/src/net/torvald/terrarum/serialise/WriteMeta.kt b/src/net/torvald/terrarum/serialise/WriteMeta.kt index 7dedfb506..e6f483e0c 100644 --- a/src/net/torvald/terrarum/serialise/WriteMeta.kt +++ b/src/net/torvald/terrarum/serialise/WriteMeta.kt @@ -3,14 +3,13 @@ package net.torvald.terrarum.serialise import com.badlogic.gdx.utils.Json import com.badlogic.gdx.utils.JsonWriter import net.torvald.terrarum.ModMgr -import net.torvald.terrarum.blockproperties.BlockCodex -import net.torvald.terrarum.blockproperties.WireCodex -import net.torvald.terrarum.itemproperties.ItemCodex -import net.torvald.terrarum.itemproperties.MaterialCodex import net.torvald.terrarum.modulebasegame.TerrarumIngame import net.torvald.terrarum.modulebasegame.worldgenerator.RoguelikeRandomiser import net.torvald.terrarum.weather.WeatherMixer +/** + * Created by minjaesong on 2021-08-23. + */ open class WriteMeta(val ingame: TerrarumIngame) { open fun invoke(): String { diff --git a/src/net/torvald/terrarum/serialise/WriteWorld.kt b/src/net/torvald/terrarum/serialise/WriteWorld.kt new file mode 100644 index 000000000..0f2626386 --- /dev/null +++ b/src/net/torvald/terrarum/serialise/WriteWorld.kt @@ -0,0 +1,48 @@ +package net.torvald.terrarum.serialise + +import net.torvald.terrarum.gameworld.BlockLayer +import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.ByteArray64GrowableOutputStream +import java.util.zip.GZIPOutputStream + +/** + * Created by minjaesong on 2021-08-23. + */ +class WriteWorld { + + open fun invoke(): String { + + + return "" + } + + /** + * @param b a BlockLayer + * @return Bytes in BlockLayer, GZip'd then Ascii85-encoded + */ + private fun blockLayerToStr(b: BlockLayer): String { + val sb = StringBuilder() + val bo = ByteArray64GrowableOutputStream() + val zo = GZIPOutputStream(bo) + + b.bytesIterator().forEachRemaining { + zo.write(it.toInt()) + } + zo.flush(); zo.close() + + val ba = bo.toByteArray64() + var bai = 0 + val buf = IntArray(4) { Ascii85.PAD_BYTE } + ba.forEach { + if (bai > 0 && bai % 4 == 0) { + sb.append(Ascii85.encode(buf[0], buf[1], buf[2], buf[3])) + } + + buf[bai % 4] = it.toInt() and 255 + + bai += 1 + }; sb.append(Ascii85.encode(buf[0], buf[1], buf[2], buf[3])) + + return sb.toString() + } + +} \ No newline at end of file