From 9e8bd5e4a963e331178debe293b2b05635c997be Mon Sep 17 00:00:00 2001 From: minjaesong Date: Sat, 18 Sep 2021 21:01:06 +0900 Subject: [PATCH] working wire cutter (drops no wire) --- assets/mods/basegame/items/items.tga | 2 +- src/net/torvald/terrarum/gameitem/GameItem.kt | 6 +++--- src/net/torvald/terrarum/gameworld/GameWorld.kt | 5 +++++ .../modulebasegame/gameactors/FixtureInventory.kt | 7 +++---- .../modulebasegame/gameactors/PlayerBuilderSigrid.kt | 4 ++-- .../terrarum/modulebasegame/gameitems/WireCutterAll.kt | 6 +++--- src/net/torvald/util/SortedArrayList.kt | 8 ++++++++ work_files/graphics/items/items.kra | 4 ++-- 8 files changed, 27 insertions(+), 15 deletions(-) diff --git a/assets/mods/basegame/items/items.tga b/assets/mods/basegame/items/items.tga index 7f29042f8..77bdb1ddc 100644 --- a/assets/mods/basegame/items/items.tga +++ b/assets/mods/basegame/items/items.tga @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:02299ed3d0faa2f4fb957c6b99c2cc77c8b8fd09904c9be48d51e21ebceac6fe +oid sha256:f16e38f27249d36e52d5996a456cb64b63100332dbb6761939a753ebcdf10558 size 262162 diff --git a/src/net/torvald/terrarum/gameitem/GameItem.kt b/src/net/torvald/terrarum/gameitem/GameItem.kt index a68baed39..5f1f9a398 100644 --- a/src/net/torvald/terrarum/gameitem/GameItem.kt +++ b/src/net/torvald/terrarum/gameitem/GameItem.kt @@ -3,14 +3,14 @@ package net.torvald.terrarum.gameitem import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.g2d.TextureRegion import net.torvald.random.HQRNG +import net.torvald.terrarum.Codex +import net.torvald.terrarum.ItemCodex import net.torvald.terrarum.ItemValue import net.torvald.terrarum.ReferencingRanges.PREFIX_DYNAMICITEM -import net.torvald.terrarum.itemproperties.ItemCodex import net.torvald.terrarum.itemproperties.Material import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.modulebasegame.gameactors.ActorInventory import net.torvald.terrarum.modulebasegame.gameactors.Pocketed -import net.torvald.terrarum.* typealias ItemID = String @@ -210,7 +210,7 @@ abstract class GameItem(val originalID: ItemID) : Comparable, Cloneabl override fun toString(): String { - return "$dynamicID/$originalID" + return "GameItem(dynID:$dynamicID,origID:$originalID)" } override fun hashCode(): Int { diff --git a/src/net/torvald/terrarum/gameworld/GameWorld.kt b/src/net/torvald/terrarum/gameworld/GameWorld.kt index 8ca649dbb..74c70c890 100644 --- a/src/net/torvald/terrarum/gameworld/GameWorld.kt +++ b/src/net/torvald/terrarum/gameworld/GameWorld.kt @@ -331,6 +331,11 @@ open class GameWorld() : Disposable { val wireNode = wirings[blockAddr] if (wireNode != null) { + if (!bypassEvent) { + Terrarum.ingame?.queueWireChangedEvent(tile, true, x, y) + Terrarum.ingame?.modified(LandUtil.LAYER_WIRE, x, y) + } + // figure out wiring graphs val matchingNeighbours = WireActor.WIRE_NEARBY.mapIndexed { index, (tx, ty) -> (getAllWiresFrom(x + tx, y + ty)?.contains(tile) == true).toInt() shl index diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureInventory.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureInventory.kt index 4d4c5402b..87ced083e 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureInventory.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureInventory.kt @@ -1,14 +1,13 @@ package net.torvald.terrarum.modulebasegame.gameactors +import net.torvald.terrarum.ItemCodex import net.torvald.terrarum.Terrarum import net.torvald.terrarum.gameitem.GameItem import net.torvald.terrarum.gameitem.ItemID -import net.torvald.terrarum.itemproperties.ItemCodex import net.torvald.terrarum.lock import net.torvald.terrarum.modulebasegame.TerrarumIngame import java.math.BigInteger import java.util.concurrent.locks.ReentrantLock -import net.torvald.terrarum.* /** * Created by minjaesong on 2021-03-16. @@ -109,10 +108,10 @@ open class FixtureInventory() { existingItem.qty = newCount } else { + // unequip must be done before the entry removal + unequipFun(existingItem) // depleted item; remove entry from inventory itemList.remove(existingItem) - // do additional removal job (e.g. unequipping) - unequipFun(existingItem) } } else { diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/PlayerBuilderSigrid.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/PlayerBuilderSigrid.kt index 938e91a48..181cb744f 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/PlayerBuilderSigrid.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/PlayerBuilderSigrid.kt @@ -2,10 +2,10 @@ package net.torvald.terrarum.modulebasegame.gameactors import net.torvald.terrarum.App import net.torvald.terrarum.ModMgr +import net.torvald.terrarum.WireCodex import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.gameactors.faction.FactionFactory import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack -import net.torvald.terrarum.* /** * Created by minjaesong on 2016-02-03. @@ -77,7 +77,7 @@ object PlayerBuilderSigrid { fun fillTestInventory(inventory: ActorInventory) { App.tileMaker.tags.forEach { t, _ -> - inventory.add(t, 9995) + inventory.add(t, 5) try { inventory.add("wall@"+t, 9995) // this code will try to add nonexisting wall items, do not get surprised with NPEs } diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/WireCutterAll.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/WireCutterAll.kt index 3ed5adfde..6bd657d87 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/WireCutterAll.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/WireCutterAll.kt @@ -20,9 +20,9 @@ class WireCutterAll(originalID: ItemID) : GameItem(originalID) { override val originalName = "ITEM_WIRE_CUTTER" override var baseMass = 0.1 override var baseToolSize: Double? = baseMass - override var stackable = true + override var stackable = false override var inventoryCategory = Category.TOOL - override val isUnique = false + override val isUnique = true override val isDynamic = false override val material = Material() override val itemImage: TextureRegion @@ -35,7 +35,7 @@ class WireCutterAll(originalID: ItemID) : GameItem(originalID) { override fun startPrimaryUse(delta: Float): Boolean { val ingame = Terrarum.ingame!! as TerrarumIngame val mouseTile = Point2i(Terrarum.mouseTileX, Terrarum.mouseTileY) - val wires = ingame.world.getAllWiresFrom(mouseTile.x, mouseTile.y) + val wires = ingame.world.getAllWiresFrom(mouseTile.x, mouseTile.y)?.cloneToList() wires?.forEach { ingame.world.removeTileWire(mouseTile.x, mouseTile.y, it, false) diff --git a/src/net/torvald/util/SortedArrayList.kt b/src/net/torvald/util/SortedArrayList.kt index 2739104b5..dddfd067b 100644 --- a/src/net/torvald/util/SortedArrayList.kt +++ b/src/net/torvald/util/SortedArrayList.kt @@ -130,6 +130,14 @@ class SortedArrayList>(initialSize: Int = 10) : MutableCollecti override inline fun forEach(action: Consumer?) = arrayList.forEach(action) inline fun forEachIndexed(action: (Int, T) -> Unit) = arrayList.forEachIndexed(action) + fun cloneToList(): List { + val ret = ArrayList() + forEach { + ret.add(it) + } + return ret + } + inline fun map(transformation: (T) -> R) = arrayList.map(transformation) diff --git a/work_files/graphics/items/items.kra b/work_files/graphics/items/items.kra index ca0696a9a..91c578d48 100644 --- a/work_files/graphics/items/items.kra +++ b/work_files/graphics/items/items.kra @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9a866c9bbe8bcced30a006349a6ddcc50fb888f466ebe0a392afbaffa6a4ef5a -size 245755 +oid sha256:b98bf0ad8f6ce520252b8e1c765ed930fec1e1780d18e46a0b19418e6303f879 +size 245803