From 22786f9a28b36563f5a72b76754334f49dbeb305 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Sun, 9 Feb 2025 21:56:46 +0900 Subject: [PATCH] better wire branching control --- assets/mods/basegame/wires/wires.csv | 15 ++++++++------- .../terrarum/blockproperties/WireCodex.kt | 2 +- .../torvald/terrarum/blockproperties/WireProp.kt | 2 +- .../torvald/terrarum/gameactors/ActorValue.kt | 2 +- .../modulebasegame/gameitems/BlockBase.kt | 16 ++++++++++------ .../gameitems/WirePieceSignalWire.kt | 4 ++-- 6 files changed, 23 insertions(+), 18 deletions(-) diff --git a/assets/mods/basegame/wires/wires.csv b/assets/mods/basegame/wires/wires.csv index bc527397b..efbc7e0d9 100644 --- a/assets/mods/basegame/wires/wires.csv +++ b/assets/mods/basegame/wires/wires.csv @@ -1,21 +1,22 @@ id;drop;name;renderclass;accept;inputcount;inputtype;outputtype;javaclass;inventoryimg;branching;tags -8192;8192;WIRE_RED;signal;digital_bit;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,0,4;1;"SIGNALWIRE" -8193;8193;WIRE_GREEN;signal;digital_bit;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,1,4;1;"SIGNALWIRE" -8194;8194;WIRE_BLUE;signal;digital_bit;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,2,4;1;"SIGNALWIRE" -8195;8195;WIRE_YELLOW;signal;digital_bit;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,3,4;1;"SIGNALWIRE" -8196;8196;WIRE_PURPLE;signal;digital_bit;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,4,4;1;"SIGNALWIRE" +8192;8192;WIRE_RED;signal;digital_bit;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,0,4;3;"SIGNALWIRE" +8193;8193;WIRE_GREEN;signal;digital_bit;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,1,4;3;"SIGNALWIRE" +8194;8194;WIRE_BLUE;signal;digital_bit;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,2,4;3;"SIGNALWIRE" +8195;8195;WIRE_YELLOW;signal;digital_bit;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,3,4;3;"SIGNALWIRE" +8196;8196;WIRE_PURPLE;signal;digital_bit;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,4,4;3;"SIGNALWIRE" 1;1;WIRE_POWER_LOW;power;power_low;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,5,4;1;"POWERWIRE_LOW" 2;2;WIRE_POWER_HIGH;power;power_high;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,6,4;1;"POWERWIRE_HIGH" 16;16;WIRE_ETHERNET;network;10base2;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,7,4;1;"ETHERNETWIRE" -#256;256;AXLE;axle;axle;1;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceAxle;basegame.items,1,5;0;"AXLE" +256;256;AXLE;axle;axle;1;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceAxle;basegame.items,1,5;0;"AXLE" # accept: which wiretype (defined elsewhere) the wires acceps. Use comma to separate multiple. N/A for electronic components (aka not wires) # inputcount: how many sides are input (outputcount is deduced from the inputcount). N/A for wires # inputtype: which wiretype it accepts. N/A for wires # outputtype: which wiretype it emits. N/A for wires -# branching: if this wire can have branches. Something like a thicknet can't have branches +# branching: if this wire can have branches. 0: unable, 1: tee-only, 2: cross-only, 3: tee and cross. +# Something like a thicknet can't have branches # # comments # digital_3bits must come right after three wires it bundles diff --git a/src/net/torvald/terrarum/blockproperties/WireCodex.kt b/src/net/torvald/terrarum/blockproperties/WireCodex.kt index bfff155b0..2fbd04fb5 100644 --- a/src/net/torvald/terrarum/blockproperties/WireCodex.kt +++ b/src/net/torvald/terrarum/blockproperties/WireCodex.kt @@ -197,7 +197,7 @@ class WireCodex { prop.inputCount = record.intVal("inputcount") prop.inputType = record.get("inputtype") ?: prop.accepts prop.outputType = record.get("outputtype") ?: prop.accepts - prop.canBranch = record.boolVal("branching") + prop.branching = record.intVal("branching") prop.tags = record.get("tags").split(',').map { it.trim().toUpperCase() }.toHashSet() wireProps[prop.id] = prop diff --git a/src/net/torvald/terrarum/blockproperties/WireProp.kt b/src/net/torvald/terrarum/blockproperties/WireProp.kt index c328fa850..646535cc8 100644 --- a/src/net/torvald/terrarum/blockproperties/WireProp.kt +++ b/src/net/torvald/terrarum/blockproperties/WireProp.kt @@ -19,7 +19,7 @@ class WireProp : TaggedProp { var inputType: String = "" var outputType: String = "" - var canBranch: Boolean = true + var branching: Int = 0 // 0: can't; 1: tee-only, 2: cross-only, 3: tee and cross /** * Mainly intended to be used by third-party modules diff --git a/src/net/torvald/terrarum/gameactors/ActorValue.kt b/src/net/torvald/terrarum/gameactors/ActorValue.kt index 1cf2b66ad..e29dc269a 100644 --- a/src/net/torvald/terrarum/gameactors/ActorValue.kt +++ b/src/net/torvald/terrarum/gameactors/ActorValue.kt @@ -90,7 +90,7 @@ class ActorValue : KVHashMap { return ActorValue(newActor, hashMap).also { val listOfBlobs = it.hashMap.entries.filter { (it.value as? String)?.startsWith(BLOB) ?: false } listOfBlobs.forEach { - + } } // TODO clone blobs diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/BlockBase.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/BlockBase.kt index a106ddf0d..ef077af2f 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/BlockBase.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/BlockBase.kt @@ -118,10 +118,12 @@ object BlockBase { /** * This function assumes xy and oxy are neighboured and tiles are correctly placed + * + * @param branching 0: no branching, 1: tee-only, 2: cross-only, 3: tee and cross */ - private fun setConnectivity(mode: String, world: GameWorld, vec: Int, item: ItemID, x: Int, y: Int, ox: Int, oy: Int) { - when (mode) { - "axle" -> { + private fun setConnectivity(branching: Int, world: GameWorld, vec: Int, item: ItemID, x: Int, y: Int, ox: Int, oy: Int) { + when (branching) { + 0 -> { // vec is guaranteed to be 5 or 10 world.setWireGraphOf(x, y, item, vec) world.setWireGraphOf(ox, oy, item, vec) @@ -143,12 +145,14 @@ object BlockBase { else false } - fun wireStartPrimaryUse(actor: ActorWithBody, gameItem: GameItem, delta: Float, wirePlaceMode: String) = mouseInInteractableRange(actor) { mx, my, mtx, mty -> + fun wireStartPrimaryUse(actor: ActorWithBody, gameItem: GameItem, delta: Float) = mouseInInteractableRange(actor) { mx, my, mtx, mty -> val itemID = gameItem.originalID val ingame = Terrarum.ingame!! as TerrarumIngame val ww = ingame.world.width + val wirePlaceMode = WireCodex[itemID].branching + if (Gdx.input.isButtonJustPressed(App.getConfigInt("config_mouseprimary")) || !isNeighbouring(ww, mtx, mty, oldTileX, oldTileY)) { initialMouseDownTileX = mtx @@ -166,7 +170,7 @@ object BlockBase { val oldTileOccupied = oldTileWires.first?.searchFor(itemID) != null val oldToNewVector = when (wirePlaceMode) { - "axle" -> { + 0 -> { // determine new vector by dividing the block cell in X-shape val mxt = mx - mtx * TILE_SIZE val myt = my - mty * TILE_SIZE @@ -190,7 +194,7 @@ object BlockBase { } } val connectedEachOther = when (wirePlaceMode) { - "axle" -> thisTileOccupied && oldTileOccupied + 0 -> thisTileOccupied && oldTileOccupied else -> wireNodesConnectedEachOther(oldToNewVector, thisTileWireCnx, oldTileWireCnx) } val thisTileWasDraggedOn = initialMouseDownTileX != mtx || initialMouseDownTileY != mty diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/WirePieceSignalWire.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/WirePieceSignalWire.kt index 9f641418a..1c9139195 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/WirePieceSignalWire.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/WirePieceSignalWire.kt @@ -32,7 +32,7 @@ class WirePieceSignalWire(originalID: ItemID, private val atlasID: String, priva } override fun startPrimaryUse(actor: ActorWithBody, delta: Float): Long { - return BlockBase.wireStartPrimaryUse(actor,this, delta, "signal_wire") + return BlockBase.wireStartPrimaryUse(actor,this, delta) } override fun effectWhileEquipped(actor: ActorWithBody, delta: Float) { @@ -69,7 +69,7 @@ class WirePieceAxle(originalID: ItemID, private val atlasID: String, private val } override fun startPrimaryUse(actor: ActorWithBody, delta: Float): Long { - return BlockBase.wireStartPrimaryUse(actor,this, delta, "axle") + return BlockBase.wireStartPrimaryUse(actor,this, delta) } override fun effectWhileEquipped(actor: ActorWithBody, delta: Float) {