diff --git a/assets/mods/basegame/items/itemid.csv b/assets/mods/basegame/items/itemid.csv index 4cff3d815..ca00f8fcb 100644 --- a/assets/mods/basegame/items/itemid.csv +++ b/assets/mods/basegame/items/itemid.csv @@ -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 @@ -181,4 +183,4 @@ id;classname;tags # reserved for debug items #16777216;net.torvald.terrarum.modulebasegame.gameitems.ItemBottomlessWaterBucket;DEBUG,TOOL #16777217;net.torvald.terrarum.modulebasegame.gameitems.ItemBottomlessLavaBucket;DEBUG,TOOL -16777472;net.torvald.terrarum.modulebasegame.gameitems.ItemMysteriousATM;DEBUG \ No newline at end of file +16777472;net.torvald.terrarum.modulebasegame.gameitems.ItemMysteriousATM;DEBUG diff --git a/src/net/torvald/terrarum/App.java b/src/net/torvald/terrarum/App.java index 79324bf6b..09cab63ca 100644 --- a/src/net/torvald/terrarum/App.java +++ b/src/net/torvald/terrarum/App.java @@ -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; diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTypewriter.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTypewriter.kt index df0b0b18a..b10f0c08d 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTypewriter.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTypewriter.kt @@ -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 + } } \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemFileRef.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemFileRef.kt index 50e65ad3f..dd98a457a 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemFileRef.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemFileRef.kt @@ -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) {