signs persisting through load/save

This commit is contained in:
minjaesong
2024-03-21 20:57:12 +09:00
parent ec76eb2685
commit d35a73c7a5
14 changed files with 109 additions and 18 deletions

View File

@@ -115,10 +115,8 @@ class ActorInventory() : FixtureInventory() {
remove(item, 1)
newItem = item.clone()
newItem.generateUniqueDynamicID(this)
newItem = item.makeDynamic(this)
newItem.stackable = false
add(newItem)
itemEquipped[newItem.equipPosition] = newItem.dynamicID //invSearchByDynamicID(newItem.dynamicID)!!.item // will test if some sketchy code is written. Test fail: kotlinNullpointerException

View File

@@ -6,6 +6,7 @@ import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED
import net.torvald.terrarum.blockproperties.Block
import net.torvald.terrarum.gameactors.*
import net.torvald.terrarum.gameitems.GameItem
import net.torvald.terrarum.gameitems.ItemID
import net.torvald.terrarum.gameworld.fmod
import net.torvald.terrarum.modulebasegame.gameitems.PickaxeCore
@@ -462,6 +463,14 @@ open class FixtureBase : ActorWithBody, CuedByTerrainChange {
} as TextureRegionPack)
}
}
/**
* For some customisable fixtures, they must create new dynamicItem out of their static "template",
* register the new dynamicID to the ItemCodex, then return the dynamicID.
*/
open fun itemise(): ItemID {
return ItemCodex.fixtureToItemID(this)
}
}
interface CuedByTerrainChange {

View File

@@ -66,10 +66,10 @@ internal class FixtureTapestry : FixtureBase {
// draw canvas and frame texture over the pixmap
val tileFilename = "${frameBlock.replace(':','-')}"
val frame = CommonResourcePool.getOrPut("tapestries-common-frame_$tileFilename.tga") {
val frame = CommonResourcePool.getOrPut("pixmap:tapestries-common-frame_$tileFilename.tga") {
Pixmap(ModMgr.getGdxFilesFromEveryMod("tapestries/common/frame_$tileFilename.tga").last().second)
} as Pixmap
val canvas = CommonResourcePool.getOrPut("tapestries-common-canvas.tga") {
val canvas = CommonResourcePool.getOrPut("pixmap:tapestries-common-canvas.tga") {
Pixmap(ModMgr.getGdxFilesFromEveryMod("tapestries/common/canvas.tga").last().second)
} as Pixmap

View File

@@ -12,10 +12,15 @@ import net.torvald.spriteanimation.SheetSpriteAnimation
import net.torvald.terrarum.*
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE
import net.torvald.terrarum.gamecontroller.KeyToggler
import net.torvald.terrarum.gameitems.GameItem
import net.torvald.terrarum.gameitems.ItemID
import net.torvald.terrarum.itemproperties.Item
import net.torvald.terrarum.langpack.Lang
import net.torvald.terrarum.modulebasegame.gameitems.ItemTextSignCopper
import net.torvald.terrarum.modulebasegame.ui.UIItemInventoryCellCommonRes.tooltipShowing
import net.torvald.terrarum.ui.Toolkit
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
import net.torvald.unicode.TIMES
import org.dyn4j.geometry.Vector2
import java.util.*
@@ -53,6 +58,19 @@ class FixtureTextSignCopper : Electric {
reload()
}
fun _itemise(actor: ActorHumanoid): GameItem {
return ItemTextSignCopper(Item.COPPER_SIGN).makeDynamic(actor.inventory).also {
it.extra["signContent"] = text
it.extra["signPanelCount"] = panelCount
it.nameSecondary = "[$panelCount${TIMES}2] $text"
}
}
override fun itemise(): ItemID {
val item = _itemise(INGAME.actorNowPlaying!!)
return item.dynamicID
}
override fun spawn(posX: Int, posY: Int, installersUUID: UUID?): Boolean = spawn(posX, posY, installersUUID, panelCount.coerceAtLeast(2), 2)
override fun reload() {