diff --git a/assets/mods/basegame/items/itemid.csv b/assets/mods/basegame/items/itemid.csv index 338f5fd09..52fd2b537 100644 --- a/assets/mods/basegame/items/itemid.csv +++ b/assets/mods/basegame/items/itemid.csv @@ -6,3 +6,4 @@ "6";"net.torvald.terrarum.modulebasegame.gameitems.ItemStorageChest" "7";"net.torvald.terrarum.modulebasegame.gameitems.WireGraphDebugger" "8";"net.torvald.terrarum.modulebasegame.gameitems.ItemLogicSignalEmitter" +"9";"net.torvald.terrarum.modulebasegame.gameitems.WireCutterAll" diff --git a/src/net/torvald/terrarum/MusicComposerApp.java b/src/net/torvald/terrarum/MusicComposerApp.java index 66a29d1d0..9d389de0f 100644 --- a/src/net/torvald/terrarum/MusicComposerApp.java +++ b/src/net/torvald/terrarum/MusicComposerApp.java @@ -34,9 +34,7 @@ public class MusicComposerApp extends ApplicationAdapter { @Override public void create() { - fontGame = new GameFontBase("assets/graphics/fonts/terrarum-sans-bitmap", false, true, false, - Texture.TextureFilter.Nearest, Texture.TextureFilter.Nearest, false, 256, false - ); + fontGame = new GameFontBase("assets/graphics/fonts/terrarum-sans-bitmap", false, true, false); } @Override diff --git a/src/net/torvald/terrarum/gameworld/GameWorld.kt b/src/net/torvald/terrarum/gameworld/GameWorld.kt index 21c4624d5..8ca649dbb 100644 --- a/src/net/torvald/terrarum/gameworld/GameWorld.kt +++ b/src/net/torvald/terrarum/gameworld/GameWorld.kt @@ -325,6 +325,29 @@ open class GameWorld() : Disposable { } } + fun removeTileWire(x: Int, y: Int, tile: ItemID, bypassEvent: Boolean) { + val (x, y) = coerceXY(x, y) + val blockAddr = LandUtil.getBlockAddr(this, x, y) + val wireNode = wirings[blockAddr] + + if (wireNode != null) { + // figure out wiring graphs + val matchingNeighbours = WireActor.WIRE_NEARBY.mapIndexed { index, (tx, ty) -> + (getAllWiresFrom(x + tx, y + ty)?.contains(tile) == true).toInt() shl index + }.sum() + for (i in 0..3) { + if (matchingNeighbours and WIRE_POS_MAP[i] > 0) { + val (tx, ty) = WireActor.WIRE_NEARBY[i] + val old = getWireGraphOf(x + tx, y + ty, tile) ?: 0 + setWireGraphOf(x + tx, y + ty, tile, old and (15 - WIRE_ANTIPOS_MAP[i])) + } + } + + wiringGraph[blockAddr]!!.remove(tile) + wirings[blockAddr]!!.ws.remove(tile) + } + } + fun getWireGraphOf(x: Int, y: Int, itemID: ItemID): Int? { val (x, y) = coerceXY(x, y) val blockAddr = LandUtil.getBlockAddr(this, x, y) diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/PlayerBuilderSigrid.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/PlayerBuilderSigrid.kt index 4f1d5137d..938e91a48 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/PlayerBuilderSigrid.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/PlayerBuilderSigrid.kt @@ -89,12 +89,13 @@ object PlayerBuilderSigrid { // item ids are defined in /items/itemid.csv inventory.add("item@basegame:1", 16) // copper pick - inventory.add("item@basegame:2") // iron pick - inventory.add("item@basegame:3") // steel pick + inventory.add("item@basegame:2", 64) // iron pick + inventory.add("item@basegame:3", 256) // steel pick inventory.add("item@basegame:5", 385930603) // test tiki torch inventory.add("item@basegame:6", 95) // storage chest inventory.add("item@basegame:7", 1) // wire debugger inventory.add("item@basegame:8", 9995) // power source + inventory.add("item@basegame:9", 1) // wire cutter WireCodex.getAll().forEach { try { diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/WireCutterAll.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/WireCutterAll.kt new file mode 100644 index 000000000..3ed5adfde --- /dev/null +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/WireCutterAll.kt @@ -0,0 +1,53 @@ +package net.torvald.terrarum.modulebasegame.gameitems + +import com.badlogic.gdx.graphics.g2d.TextureRegion +import net.torvald.terrarum.CommonResourcePool +import net.torvald.terrarum.Point2i +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.modulebasegame.TerrarumIngame + +/** + * TEST ITEM; this item cuts every wire on a cell, and has no durability drop + * + * Created by minjaesong on 2021-09-18. + */ +class WireCutterAll(originalID: ItemID) : GameItem(originalID) { + + override var dynamicID: ItemID = originalID + override val originalName = "ITEM_WIRE_CUTTER" + override var baseMass = 0.1 + override var baseToolSize: Double? = baseMass + override var stackable = true + override var inventoryCategory = Category.TOOL + override val isUnique = false + override val isDynamic = false + override val material = Material() + override val itemImage: TextureRegion + get() = CommonResourcePool.getAsTextureRegionPack("basegame.items16").get(0, 9) + + init { + super.equipPosition = GameItem.EquipPosition.HAND_GRIP + } + + 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) + + wires?.forEach { + ingame.world.removeTileWire(mouseTile.x, mouseTile.y, it, false) + } ?: return false + return true + } + + override fun effectWhenEquipped(delta: Float) { + (Terrarum.ingame!! as TerrarumIngame).selectedWireRenderClass = "wire_render_all" + } + + override fun effectOnUnequip(delta: Float) { + (Terrarum.ingame!! as TerrarumIngame).selectedWireRenderClass = "" + } +} \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/WirePieceSignalWire.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/WirePieceSignalWire.kt index 08faa4cfc..287ddf502 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/WirePieceSignalWire.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/WirePieceSignalWire.kt @@ -28,7 +28,6 @@ class WirePieceSignalWire(originalID: ItemID, private val atlasID: String, priva init { super.equipPosition = GameItem.EquipPosition.HAND_GRIP - } override fun startPrimaryUse(delta: Float): Boolean {