better wire branching control

This commit is contained in:
minjaesong
2025-02-09 21:56:46 +09:00
parent 34d8f1504f
commit 22786f9a28
6 changed files with 23 additions and 18 deletions

View File

@@ -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
1 id drop name renderclass accept inputcount inputtype outputtype javaclass inventoryimg branching tags
2 8192 8192 WIRE_RED signal digital_bit 3 N/A N/A net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire basegame.items,0,4 1 3 SIGNALWIRE
3 8193 8193 WIRE_GREEN signal digital_bit 3 N/A N/A net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire basegame.items,1,4 1 3 SIGNALWIRE
4 8194 8194 WIRE_BLUE signal digital_bit 3 N/A N/A net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire basegame.items,2,4 1 3 SIGNALWIRE
5 8195 8195 WIRE_YELLOW signal digital_bit 3 N/A N/A net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire basegame.items,3,4 1 3 SIGNALWIRE
6 8196 8196 WIRE_PURPLE signal digital_bit 3 N/A N/A net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire basegame.items,4,4 1 3 SIGNALWIRE
7 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
8 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
9 16 16 WIRE_ETHERNET network 10base2 3 N/A N/A net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire basegame.items,7,4 1 ETHERNETWIRE
10 #256 256 256 AXLE axle axle 1 N/A N/A net.torvald.terrarum.modulebasegame.gameitems.WirePieceAxle basegame.items,1,5 0 AXLE
11 # accept: which wiretype (defined elsewhere) the wires acceps. Use comma to separate multiple. N/A for electronic components (aka not wires)
12 # inputcount: how many sides are input (outputcount is deduced from the inputcount). N/A for wires
13 # inputtype: which wiretype it accepts. N/A for wires
14 # outputtype: which wiretype it emits. N/A for wires
15 # 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.
16 # # Something like a thicknet can't have branches
17 # comments #
18 # digital_3bits must come right after three wires it bundles # comments
19 # digital_3bits must come right after three wires it bundles
20 # what's the point of WIRE_BUNDLE when you can overlap as many wires as you want? -- Torvald, 2021-08-09
21
22

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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) {