mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-07 12:21:52 +09:00
working ItemFileRef instantiation and serialisation
This commit is contained in:
@@ -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
|
||||
|
||||
|
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user