From 26c71e691cb56567b149db9c5474e9e58ab46740 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Tue, 21 Sep 2021 00:22:36 +0900 Subject: [PATCH] fixtures can be despawned by "mining" them --- assets/mods/basegame/items/itemid.csv | 2 +- lib/TerrarumSansBitmap.jar | Bin 84195 -> 84874 bytes .../spriteanimation/SpriteAnimation.kt | 5 +-- src/net/torvald/terrarum/App.java | 13 +++++--- src/net/torvald/terrarum/PostProcessor.kt | 2 +- src/net/torvald/terrarum/SanicLoadScreen.kt | 2 +- src/net/torvald/terrarum/Terrarum.kt | 2 +- .../terrarum/blockstats/MinimapComposer.kt | 2 +- .../terrarum/gameactors/ActorWithBody.kt | 4 +-- .../gamecontroller/IngameController.kt | 2 +- src/net/torvald/terrarum/gameitem/GameItem.kt | 2 +- .../gameparticles/ParticleVanishingTexture.kt | 4 +++ .../terrarum/gameworld/WorldSimulator.kt | 3 +- .../terrarum/modulebasegame/IngameRenderer.kt | 2 +- .../terrarum/modulebasegame/TerrarumIngame.kt | 28 ++++++++-------- .../modulebasegame/WorldgenLoadScreen.kt | 2 +- .../modulebasegame/gameactors/FixtureBase.kt | 30 +++++++++++------- .../gameactors/FixtureLogicSignalEmitter.kt | 11 ------- .../gameitems/ItemLogicSignalEmitter.kt | 3 +- .../gameitems/ItemStorageChest.kt | 5 ++- .../{TikiTorchTester.kt => ItemTikiTorch.kt} | 16 +++++++--- src/net/torvald/terrarum/ui/Toolkit.kt | 2 +- 22 files changed, 79 insertions(+), 63 deletions(-) rename src/net/torvald/terrarum/modulebasegame/gameitems/{TikiTorchTester.kt => ItemTikiTorch.kt} (66%) diff --git a/assets/mods/basegame/items/itemid.csv b/assets/mods/basegame/items/itemid.csv index 52fd2b537..349f52834 100644 --- a/assets/mods/basegame/items/itemid.csv +++ b/assets/mods/basegame/items/itemid.csv @@ -2,7 +2,7 @@ "1";"net.torvald.terrarum.modulebasegame.gameitems.PickaxeCopper" "2";"net.torvald.terrarum.modulebasegame.gameitems.PickaxeIron" "3";"net.torvald.terrarum.modulebasegame.gameitems.PickaxeSteel" -"5";"net.torvald.terrarum.modulebasegame.gameitems.TikiTorchTester" +"5";"net.torvald.terrarum.modulebasegame.gameitems.ItemTikiTorch" "6";"net.torvald.terrarum.modulebasegame.gameitems.ItemStorageChest" "7";"net.torvald.terrarum.modulebasegame.gameitems.WireGraphDebugger" "8";"net.torvald.terrarum.modulebasegame.gameitems.ItemLogicSignalEmitter" diff --git a/lib/TerrarumSansBitmap.jar b/lib/TerrarumSansBitmap.jar index 71292406b4b1dc14d3d23c86b504c82aa8a47c7b..c1454abf7879df16113f18a96ca3c66766634147 100644 GIT binary patch delta 6492 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 T6@kLgaU~!g8k;Qee)WF<35JqM delta 5714 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 tempFilePool = new HashSet<>(); - public static HashSet disposableSingletonsPool = new HashSet<>(); + public static HashSet disposables = new HashSet<>(); public static char gamepadLabelStart = 0xE000; // lateinit public static char gamepadLabelSelect = 0xE000; // lateinit @@ -376,9 +376,9 @@ public class App implements ApplicationListener { glInfo.create(); - CommonResourcePool.INSTANCE.addToLoadingList("blockmarkings_common", () -> new TextureRegionPack(Gdx.files.internal("assets/graphics/blocks/block_markings_common.tga"), 16, 16, 0, 0, 0, 0, false)); + CommonResourcePool.INSTANCE.addToLoadingList("blockmarkings_common", () -> new TextureRegionPack(Gdx.files.internal("assets/graphics/blocks/block_markings_common.tga"), 16, 16, 0, 0, 0, 0, false, false, false)); CommonResourcePool.INSTANCE.addToLoadingList("blockmarking_actor", () -> new BlockMarkerActor()); - CommonResourcePool.INSTANCE.addToLoadingList("loading_circle_64", () -> new TextureRegionPack(Gdx.files.internal("assets/graphics/gui/loading_circle_64.tga"), 64, 64, 0, 0, 0, 0, false)); + CommonResourcePool.INSTANCE.addToLoadingList("loading_circle_64", () -> new TextureRegionPack(Gdx.files.internal("assets/graphics/gui/loading_circle_64.tga"), 64, 64, 0, 0, 0, 0, false, false, false)); newTempFile("wenquanyi.tga"); // temp file required by the font @@ -720,7 +720,12 @@ public class App implements ApplicationListener { textureWhiteCircle.dispose(); logo.getTexture().dispose(); - disposableSingletonsPool.forEach((it) -> {try { it.dispose(); } catch (IllegalArgumentException e) {}}); + disposables.forEach((it) -> { + try { + it.dispose(); + } + catch (NullPointerException | IllegalArgumentException e) { } + }); ModMgr.INSTANCE.disposeMods(); diff --git a/src/net/torvald/terrarum/PostProcessor.kt b/src/net/torvald/terrarum/PostProcessor.kt index cb43c699d..940366553 100644 --- a/src/net/torvald/terrarum/PostProcessor.kt +++ b/src/net/torvald/terrarum/PostProcessor.kt @@ -42,7 +42,7 @@ object PostProcessor : Disposable { private val functionRowHelper = Texture(Gdx.files.internal("assets/graphics/function_row_help.png")) init { - App.disposableSingletonsPool.add(this) + App.disposables.add(this) } override fun dispose() { diff --git a/src/net/torvald/terrarum/SanicLoadScreen.kt b/src/net/torvald/terrarum/SanicLoadScreen.kt index 441198816..39baea595 100644 --- a/src/net/torvald/terrarum/SanicLoadScreen.kt +++ b/src/net/torvald/terrarum/SanicLoadScreen.kt @@ -15,7 +15,7 @@ import net.torvald.terrarum.modulebasegame.TerrarumIngame object SanicLoadScreen : LoadScreenBase() { init { - App.disposableSingletonsPool.add(this) + App.disposables.add(this) } private var arrowObjPos = 0f // 0 means at starting position, regardless of screen position diff --git a/src/net/torvald/terrarum/Terrarum.kt b/src/net/torvald/terrarum/Terrarum.kt index 36e56c5a6..f7b7069b0 100644 --- a/src/net/torvald/terrarum/Terrarum.kt +++ b/src/net/torvald/terrarum/Terrarum.kt @@ -147,7 +147,7 @@ object Terrarum : Disposable { println("[Terrarum] vendor = $processorVendor") - App.disposableSingletonsPool.add(this) + App.disposables.add(this) diff --git a/src/net/torvald/terrarum/blockstats/MinimapComposer.kt b/src/net/torvald/terrarum/blockstats/MinimapComposer.kt index 289671969..6efde46c2 100644 --- a/src/net/torvald/terrarum/blockstats/MinimapComposer.kt +++ b/src/net/torvald/terrarum/blockstats/MinimapComposer.kt @@ -64,7 +64,7 @@ object MinimapComposer : Disposable { totalWidth = minimap.width totalHeight = minimap.height - App.disposableSingletonsPool.add(this) + App.disposables.add(this) } fun update() { diff --git a/src/net/torvald/terrarum/gameactors/ActorWithBody.kt b/src/net/torvald/terrarum/gameactors/ActorWithBody.kt index 19892ad22..e7fc59b4b 100644 --- a/src/net/torvald/terrarum/gameactors/ActorWithBody.kt +++ b/src/net/torvald/terrarum/gameactors/ActorWithBody.kt @@ -1922,8 +1922,8 @@ open class ActorWithBody : Actor { this override fun dispose() { - sprite?.dispose() - spriteGlow?.dispose() + App.disposables.add(sprite) + App.disposables.add(spriteGlow) } } diff --git a/src/net/torvald/terrarum/gamecontroller/IngameController.kt b/src/net/torvald/terrarum/gamecontroller/IngameController.kt index 650216224..45072ab8e 100644 --- a/src/net/torvald/terrarum/gamecontroller/IngameController.kt +++ b/src/net/torvald/terrarum/gamecontroller/IngameController.kt @@ -142,7 +142,7 @@ class IngameController(val terrarumIngame: TerrarumIngame) : InputAdapter() { // - not clicking anymore // - using any item that is not fixture (blocks, picks) if (!Gdx.input.isButtonPressed(App.getConfigInt("config_mouseprimary")) || - GameItem.Category.FIXTURE != ItemCodex.get(terrarumIngame.actorNowPlaying?.inventory?.itemEquipped?.get(GameItem.EquipPosition.HAND_GRIP))?.inventoryCategory) { + GameItem.Category.MISC != ItemCodex.get(terrarumIngame.actorNowPlaying?.inventory?.itemEquipped?.get(GameItem.EquipPosition.HAND_GRIP))?.inventoryCategory) { worldPrimaryClickLatched = false } diff --git a/src/net/torvald/terrarum/gameitem/GameItem.kt b/src/net/torvald/terrarum/gameitem/GameItem.kt index 5f1f9a398..6cf9cf656 100644 --- a/src/net/torvald/terrarum/gameitem/GameItem.kt +++ b/src/net/torvald/terrarum/gameitem/GameItem.kt @@ -287,7 +287,7 @@ abstract class GameItem(val originalID: ItemID) : Comparable, Cloneabl @JvmStatic val BLOCK = "block" @JvmStatic val WALL = "wall" @JvmStatic val WIRE = "wire" - @JvmStatic val FIXTURE = "fixture" +// @JvmStatic val FIXTURE = "fixture" @JvmStatic val MISC = "misc" } diff --git a/src/net/torvald/terrarum/gameparticles/ParticleVanishingTexture.kt b/src/net/torvald/terrarum/gameparticles/ParticleVanishingTexture.kt index 4d22a7b1a..0fd9c8411 100644 --- a/src/net/torvald/terrarum/gameparticles/ParticleVanishingTexture.kt +++ b/src/net/torvald/terrarum/gameparticles/ParticleVanishingTexture.kt @@ -56,12 +56,14 @@ class ParticleVanishingText(val text: String, x: Double, y: Double, noCollision: override fun drawBody(batch: SpriteBatch) { if (!flagDespawn) { + val oldColour = batch.color.cpy() batch.color = drawColour lines.forEachIndexed { index, line -> drawBodyInGoodPosition(hitbox.startX.toFloat(), hitbox.startY.toFloat() + TinyAlphNum.H * index) { x, y -> TinyAlphNum.draw(batch, line, x, y ) } } + batch.color = oldColour } } } @@ -102,10 +104,12 @@ open class ParticleVanishingSprite(val sprite: TextureRegionPack, val delay: Flo override fun drawBody(batch: SpriteBatch) { if (!flagDespawn) { + val oldColour = batch.color.cpy() batch.color = drawColour drawBodyInGoodPosition(hitbox.startX.toFloat(), hitbox.startY.toFloat()) { x, y -> batch.draw(sprite.get(frame, row), x, y) } + batch.color = oldColour } } } \ No newline at end of file diff --git a/src/net/torvald/terrarum/gameworld/WorldSimulator.kt b/src/net/torvald/terrarum/gameworld/WorldSimulator.kt index 11b3bcd24..714436907 100644 --- a/src/net/torvald/terrarum/gameworld/WorldSimulator.kt +++ b/src/net/torvald/terrarum/gameworld/WorldSimulator.kt @@ -208,7 +208,8 @@ object WorldSimulator { for (y in updateYTo downTo updateYFrom) { val currentTile = world.getTileFromTerrain(x, y) val prop = BlockCodex[currentTile] - val isAir = currentTile == Block.AIR + // don't let the falling sand destroy the precious storage chest + val isAir = !prop.isSolid && !prop.nameKey.contains("ACTORBLOCK") val support = prop.maxSupport val isFallable = support != -1 diff --git a/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt b/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt index 286fb1164..29c2c1758 100644 --- a/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt +++ b/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt @@ -133,7 +133,7 @@ object IngameRenderer : Disposable { * actually matter */ @JvmStatic fun initialise() { if (!initialisedExternally) { - App.disposableSingletonsPool.add(this) + App.disposables.add(this) // also initialise these sinigletons BlocksDrawer diff --git a/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt b/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt index 10099b82c..1afb08860 100644 --- a/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt +++ b/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt @@ -453,6 +453,7 @@ open class TerrarumIngame(batch: SpriteBatch) : IngameInstance(batch) { override fun worldPrimaryClickStart(delta: Float) { //println("[Ingame] worldPrimaryClickStart $delta") + val itemOnGrip = ItemCodex[actorNowPlaying?.inventory?.itemEquipped?.get(GameItem.EquipPosition.HAND_GRIP)] // bring up the UIs of the fixtures (e.g. crafting menu from a crafting table) var uiOpened = false @@ -463,28 +464,29 @@ open class TerrarumIngame(batch: SpriteBatch) : IngameInstance(batch) { } // scan for the one with non-null UI. // what if there's multiple of such fixtures? whatever, you are supposed to DISALLOW such situation. - for (kk in actorsUnderMouse.indices) { - actorsUnderMouse[kk].mainUI?.let { - uiOpened = true + if (itemOnGrip?.inventoryCategory != GameItem.Category.TOOL) { // don't open the UI when player's holding a tool + for (kk in actorsUnderMouse.indices) { + actorsUnderMouse[kk].mainUI?.let { + uiOpened = true - // property 'uiFixture' is a dedicated property that the TerrarumIngame recognises. - // when it's not null, the UI will be updated and rendered - // when the UI is closed, it'll be replaced with a null value - uiFixture = it + // property 'uiFixture' is a dedicated property that the TerrarumIngame recognises. + // when it's not null, the UI will be updated and rendered + // when the UI is closed, it'll be replaced with a null value + uiFixture = it - it.setPosition(0, 0) - it.setAsOpen() + it.setPosition(0, 0) + it.setAsOpen() + } + break } - break } // don't want to open the UI and use the item at the same time, would ya? if (!uiOpened) { - val itemOnGrip = actorNowPlaying?.inventory?.itemEquipped?.get(GameItem.EquipPosition.HAND_GRIP) - val consumptionSuccessful = ItemCodex[itemOnGrip]?.startPrimaryUse(delta) ?: false + val consumptionSuccessful = itemOnGrip?.startPrimaryUse(delta) ?: false if (consumptionSuccessful) - actorNowPlaying?.inventory?.consumeItem(ItemCodex[itemOnGrip]!!) + actorNowPlaying?.inventory?.consumeItem(itemOnGrip!!) } } diff --git a/src/net/torvald/terrarum/modulebasegame/WorldgenLoadScreen.kt b/src/net/torvald/terrarum/modulebasegame/WorldgenLoadScreen.kt index 99751068e..41130131d 100644 --- a/src/net/torvald/terrarum/modulebasegame/WorldgenLoadScreen.kt +++ b/src/net/torvald/terrarum/modulebasegame/WorldgenLoadScreen.kt @@ -18,7 +18,7 @@ class WorldgenLoadScreen(screenToBeLoaded: IngameInstance, private val worldwidt // a Class impl is chosen to make resize-handling easier, there's not much benefit making this a singleton anyway init { - App.disposableSingletonsPool.add(this) + App.disposables.add(this) } override var screenToLoad: IngameInstance? = screenToBeLoaded diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt index 8958971ba..febdb59b4 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt @@ -52,7 +52,7 @@ open class FixtureBase : ActorWithBody, CuedByTerrainChange { this.inventory = inventory if (mainUI != null) - App.disposableSingletonsPool.add(mainUI) + App.disposables.add(mainUI) } /** @@ -72,7 +72,7 @@ open class FixtureBase : ActorWithBody, CuedByTerrainChange { } override fun updateForTerrainChange(cue: IngameInstance.BlockChangeQueueItem) { - // TODO check for despawn code here + } private fun fillFillerBlock(bypassEvent: Boolean = false) { @@ -151,14 +151,11 @@ open class FixtureBase : ActorWithBody, CuedByTerrainChange { * Removes this instance of the fixture from the world */ open fun despawn() { - val posX = worldBlockPos!!.x - val posY = worldBlockPos!!.y + println("${this.javaClass.simpleName} dispose") // remove filler block forEachBlockbox { x, y -> - if (world!!.getTileFromTerrain(x, y) == blockBox.collisionType) { - world!!.setTileTerrain(x, y, Block.AIR, false) - } + world!!.setTileTerrain(x, y, Block.AIR, false) } worldBlockPos = null @@ -166,6 +163,12 @@ open class FixtureBase : ActorWithBody, CuedByTerrainChange { this.isVisible = false + if (this is Electric) { + wireEmitterTypes.clear() + wireEmission.clear() + wireConsumption.clear() + } + // TODO drop self as an item (instance of DroppedItem) } @@ -173,11 +176,16 @@ open class FixtureBase : ActorWithBody, CuedByTerrainChange { super.update(delta) // if not flagged to despawn and not actually despawned (which sets worldBlockPos as null), always fill up fillerBlock if (!flagDespawn && worldBlockPos != null) { - fillFillerBlock(true) - } - else if (flagDespawn) { - despawn() + // for removal-by-player because player is removing the filler block by pick + forEachBlockbox { x, y -> + if (world!!.getTileFromTerrain(x, y) != blockBox.collisionType) { + flagDespawn = true + } + } + + if (flagDespawn) despawn() } + // actual actor removal is performed by the TerrarumIngame } } diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalEmitter.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalEmitter.kt index 7d9861fc3..f3da3c009 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalEmitter.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalEmitter.kt @@ -2,7 +2,6 @@ package net.torvald.terrarum.modulebasegame.gameactors import net.torvald.terrarum.CommonResourcePool import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE -import net.torvald.terrarum.blockproperties.WireCodex import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.langpack.Lang import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack @@ -41,15 +40,5 @@ class FixtureLogicSignalEmitter : FixtureBase, Electric { const val MASS = 1.0 } - override fun update(delta: Float) { - // set emit - /*worldBlockPos?.let { (x, y) -> - WireCodex.getAll().filter { it.accepts == "digital_bit" }.forEach { prop -> - // only set a state of wire that actually exists on the world - if (world?.getWireGraphOf(x, y, prop.id) != null) - world?.setWireEmitStateOf(x, y, prop.id, wireEmission[0]!!) - } - }*/ - } } diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemLogicSignalEmitter.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemLogicSignalEmitter.kt index 59ae182f0..e2f21ddb2 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemLogicSignalEmitter.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemLogicSignalEmitter.kt @@ -8,7 +8,6 @@ import net.torvald.terrarum.Terrarum import net.torvald.terrarum.gameitem.GameItem import net.torvald.terrarum.gameitem.ItemID import net.torvald.terrarum.itemproperties.Material -import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.modulebasegame.TerrarumIngame import net.torvald.terrarum.modulebasegame.gameactors.FixtureLogicSignalEmitter @@ -18,7 +17,7 @@ class ItemLogicSignalEmitter(originalID: ItemID) : GameItem(originalID) { override val originalName = "ITEM_LOGIC_SIGNAL_EMITTER" override var baseMass = FixtureLogicSignalEmitter.MASS override var stackable = true - override var inventoryCategory = Category.FIXTURE + override var inventoryCategory = Category.MISC override val isUnique = false override val isDynamic = false override val material = Material() diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemStorageChest.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemStorageChest.kt index 4b81e23b0..2a681f57c 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemStorageChest.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemStorageChest.kt @@ -6,7 +6,6 @@ import net.torvald.terrarum.Terrarum import net.torvald.terrarum.gameitem.GameItem import net.torvald.terrarum.gameitem.ItemID import net.torvald.terrarum.itemproperties.Material -import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.modulebasegame.gameactors.FixtureStorageChest import net.torvald.terrarum.modulebasegame.gameactors.FixtureTikiTorch @@ -19,12 +18,12 @@ class ItemStorageChest(originalID: ItemID) : GameItem(originalID) { override val originalName = "ITEM_STORAGE_CHEST" override var baseMass = FixtureTikiTorch.MASS override var stackable = true - override var inventoryCategory = Category.FIXTURE + override var inventoryCategory = Category.MISC override val isUnique = false override val isDynamic = false override val material = Material() override val itemImage: TextureRegion - get() = CommonResourcePool.getAsTextureRegion("itemplaceholder_16") + get() = CommonResourcePool.getAsTextureRegion("itemplaceholder_32") override var baseToolSize: Double? = baseMass init { diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/TikiTorchTester.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemTikiTorch.kt similarity index 66% rename from src/net/torvald/terrarum/modulebasegame/gameitems/TikiTorchTester.kt rename to src/net/torvald/terrarum/modulebasegame/gameitems/ItemTikiTorch.kt index 957edda55..30eb746a9 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/TikiTorchTester.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemTikiTorch.kt @@ -2,28 +2,36 @@ package net.torvald.terrarum.modulebasegame.gameitems import com.badlogic.gdx.graphics.g2d.TextureRegion import net.torvald.terrarum.CommonResourcePool +import net.torvald.terrarum.ModMgr import net.torvald.terrarum.Terrarum import net.torvald.terrarum.gameitem.GameItem import net.torvald.terrarum.gameitem.ItemID import net.torvald.terrarum.itemproperties.Material -import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.modulebasegame.gameactors.FixtureTikiTorch +import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack /** * Created by minjaesong on 2019-05-16. */ -class TikiTorchTester(originalID: ItemID) : GameItem(originalID) { +class ItemTikiTorch(originalID: ItemID) : GameItem(originalID) { + + init { + CommonResourcePool.addToLoadingList("sprites-fixtures-tiki_torch.tga") { + TextureRegionPack(ModMgr.getGdxFile("basegame", "sprites/fixtures/tiki_torch.tga"), 16, 32, flipY = true) + } + CommonResourcePool.loadAll() + } override var dynamicID: ItemID = originalID override val originalName = "ITEM_TIKI_TORCH" override var baseMass = FixtureTikiTorch.MASS override var stackable = true - override var inventoryCategory = Category.FIXTURE + override var inventoryCategory = Category.MISC override val isUnique = false override val isDynamic = false override val material = Material() override val itemImage: TextureRegion - get() = CommonResourcePool.getAsTextureRegion("itemplaceholder_48") + get() = CommonResourcePool.getAsTextureRegionPack("sprites-fixtures-tiki_torch.tga").get(0,0) override var baseToolSize: Double? = baseMass init { diff --git a/src/net/torvald/terrarum/ui/Toolkit.kt b/src/net/torvald/terrarum/ui/Toolkit.kt index a23eb1272..bf873a29d 100644 --- a/src/net/torvald/terrarum/ui/Toolkit.kt +++ b/src/net/torvald/terrarum/ui/Toolkit.kt @@ -26,7 +26,7 @@ object Toolkit : Disposable { init { - App.disposableSingletonsPool.add(this) + App.disposables.add(this) CommonResourcePool.addToLoadingList("toolkit_box_border") { TextureRegionPack(Gdx.files.internal("./assets/graphics/gui/box_border_flat_tileable.tga"), 1, 1)