working ItemFileRef instantiation and serialisation

This commit is contained in:
minjaesong
2025-01-30 11:53:21 +09:00
parent 29034e2104
commit bb1da3b1ec
4 changed files with 58 additions and 2 deletions

View File

@@ -153,6 +153,8 @@ id;classname;tags
# data storage (text signs; 256)
33280;net.torvald.terrarum.modulebasegame.gameitems.ItemTextSignCopper;FIXTURE,BASEOBJECT
# data storage (typewritten leaflets; 256)
33536;net.torvald.terrarum.modulebasegame.gameitems.ItemFileRef;FIXTURE,BASEOBJECT
# fluids on storage
1 id classname tags
153 1048576 # ...
154 1048577 # 10FF00h..10FFFFh : container type 255 x Fluid type 0..255
155 #1048578 1048576 net.torvald.terrarum.modulebasegame.gameitems.ItemBucketWooden02 net.torvald.terrarum.modulebasegame.gameitems.ItemBucketWooden00 FLUIDSTORAGE,OPENSTORAGE,NOEXTREMETHERM FLUIDSTORAGE,OPENSTORAGE,NOEXTREMETHERM,FLUIDSTORAGEEMPTY
156 1048577 net.torvald.terrarum.modulebasegame.gameitems.ItemBucketWooden01 FLUIDSTORAGE,OPENSTORAGE,NOEXTREMETHERM
157 #1048578 net.torvald.terrarum.modulebasegame.gameitems.ItemBucketWooden02 FLUIDSTORAGE,OPENSTORAGE,NOEXTREMETHERM
158 1048579 net.torvald.terrarum.modulebasegame.gameitems.ItemBucketWooden03 FLUIDSTORAGE,OPENSTORAGE,NOEXTREMETHERM
159 1048832 net.torvald.terrarum.modulebasegame.gameitems.ItemBucketIron00 FLUIDSTORAGE,OPENSTORAGE,FLUIDSTORAGEEMPTY
160 1048833 net.torvald.terrarum.modulebasegame.gameitems.ItemBucketIron01 FLUIDSTORAGE,OPENSTORAGE

View File

@@ -6,6 +6,7 @@ import com.badlogic.gdx.audio.Music;
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration;
import com.badlogic.gdx.backends.lwjgl3.TerrarumLwjgl3Application;
import com.badlogic.gdx.controllers.Controllers;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.*;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
@@ -51,6 +52,7 @@ import net.torvald.unsafe.UnsafeHelper;
import net.torvald.util.DebugTimers;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.jetbrains.annotations.Nullable;
import org.lwjgl.PointerBuffer;
import org.lwjgl.glfw.GLFW;

View File

@@ -1,8 +1,16 @@
package net.torvald.terrarum.modulebasegame.gameactors
import net.torvald.spriteanimation.SheetSpriteAnimation
import net.torvald.terrarum.App
import net.torvald.terrarum.App.printdbg
import net.torvald.terrarum.INGAME
import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.gameactors.AVKey
import net.torvald.terrarum.langpack.Lang
import net.torvald.terrarum.modulebasegame.gameitems.FileRefItemPrimaryUseHandler
import net.torvald.terrarum.modulebasegame.gameitems.ItemFileRef
import net.torvald.terrarum.serialise.Common
import java.util.*
import kotlin.math.roundToInt
/**
@@ -41,7 +49,7 @@ class FixtureTypewriter : FixtureBase {
override fun updateImpl(delta: Float) {
super.updateImpl(delta)
(sprite as SheetSpriteAnimation).currentRow = 1 + (carriagePosition.toFloat() / TYPEWRITER_COLUMNS * 10).roundToInt()
//(sprite as SheetSpriteAnimation).currentRow = 1 + (carriagePosition.toFloat() / TYPEWRITER_COLUMNS * 10).roundToInt()
}
companion object {
@@ -49,4 +57,42 @@ class FixtureTypewriter : FixtureBase {
const val TYPEWRITER_ROWS = 30
}
override fun onInteract(mx: Double, my: Double) {
printdbg(this, "Typewriter onInteract")
// test spit out ItemFileRef item
val textFileContents = """This is a test of creating ItemFileRef item in-game.
|Caller: ${this.javaClass.canonicalName}
""".trimMargin()
val newUUID = UUID.randomUUID()
Terrarum.getSharedSaveFiledesc(newUUID.toString()).let {
printdbg(this, "FilePath: ${it.path}")
it.writeText(textFileContents, Common.CHARSET)
}
// DON'T create an anonymous class here: they won't be serialised
INGAME.actorNowPlaying?.inventory?.let { inventory ->
val newItem = ItemFileRef("item@basegame:33536").makeDynamic(inventory).also { it0 ->
val it = it0 as ItemFileRef
it.refIsShared = true
it.uuid = newUUID
it.refPath = newUUID.toString()
it.mediumIdentifier = "text/typewriter"
it.useItemHandler = "net.torvald.terrarum.modulebasegame.gameactors.TestLeafletPrimaryUseHandler"
it.name = "Testification"
it.author = "Author Name Here"
}
inventory.add(newItem)
}
}
}
internal class TestLeafletPrimaryUseHandler : FileRefItemPrimaryUseHandler {
override fun use(item: ItemFileRef): Long {
println(item.getAsFile().readText(Common.CHARSET))
return 0L
}
}

View File

@@ -16,6 +16,10 @@ import java.util.UUID
*/
open class ItemFileRef(originalID: ItemID) : GameItem(originalID) {
private constructor() : this("")
/*var name is defined in GameItem*/
var author = ""
var collection = ""
@@ -98,6 +102,8 @@ open class ItemFileRef(originalID: ItemID) : GameItem(originalID) {
@Transient private var classCache: FileRefItemPrimaryUseHandler? = null
override fun startPrimaryUse(actor: ActorWithBody, delta: Float): Long {
// println("Use item! handler=${useItemHandler}; cache=${classCache?.javaClass?.canonicalName}")
return if (useItemHandler.isNotBlank()) {
try {
if (classCache == null) {