loading player from json file

This commit is contained in:
minjaesong
2021-08-28 16:31:06 +09:00
parent 29cccea19b
commit b84a0a770b
31 changed files with 308 additions and 145 deletions

View File

@@ -0,0 +1,41 @@
package net.torvald.terrarum.serialise
import net.torvald.spriteanimation.HasAssembledSprite
import net.torvald.spriteanimation.SpriteAnimation
import net.torvald.terrarum.gameactors.Actor
import net.torvald.terrarum.gameactors.ActorWithBody
import net.torvald.terrarum.modulebasegame.TerrarumIngame
import net.torvald.terrarum.modulebasegame.gameactors.ActorHumanoid
import net.torvald.terrarum.modulebasegame.gameactors.IngamePlayer
import java.io.InputStream
import java.io.Reader
/**
* Created by minjaesong on 2021-08-27.
*/
class ReadActor(val ingame: TerrarumIngame) {
open fun invoke(worldDataStream: InputStream) {
postRead(Common.jsoner.fromJson(IngamePlayer::class.java, worldDataStream))
}
open fun invoke(worldDataStream: Reader) {
IngamePlayer()
postRead(Common.jsoner.fromJson(IngamePlayer::class.java, worldDataStream))
}
private fun postRead(actor: IngamePlayer) {
// filling in Transients
actor.actorValue.actor = actor
actor.inventory.actor = actor
actor.sprite = SpriteAnimation(actor)
if (actor.animDescPathGlow != null) actor.spriteGlow = SpriteAnimation(actor)
actor.reassembleSprite(actor.sprite!!, actor.spriteGlow)
// replace existing player
ingame.forceRemoveActor(ingame.actorNowPlaying!!)
ingame.addNewActor(actor)
ingame.actorNowPlaying = actor
}
}

View File

@@ -4,6 +4,7 @@ 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 net.torvald.terrarum.modulebasegame.gameactors.IngamePlayer
import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.ByteArray64
import java.math.BigInteger
@@ -12,11 +13,11 @@ import java.math.BigInteger
*/
object WriteActor {
operator fun invoke(actor: Actor): String {
operator fun invoke(actor: IngamePlayer): String {
return Common.jsoner.toJson(actor)
}
fun encodeToByteArray64(actor: Actor): ByteArray64 {
fun encodeToByteArray64(actor: IngamePlayer): ByteArray64 {
val ba = ByteArray64()
this.invoke(actor).toByteArray().forEach { ba.add(it) }
return ba