diff --git a/res_raw/atlas.tps b/res_raw/atlas.tps
index 2dd81966..1fddf30d 100644
--- a/res_raw/atlas.tps
+++ b/res_raw/atlas.tps
@@ -367,6 +367,18 @@
sprites/buildings/wire-split.png
sprites/buildings/wire-turn.png
sprites/buildings/wire.png
+ sprites/wires/sets/color-cross.png
+ sprites/wires/sets/color-split.png
+ sprites/wires/sets/color-turn.png
+ sprites/wires/sets/color.png
+ sprites/wires/sets/conflict-cross.png
+ sprites/wires/sets/conflict-split.png
+ sprites/wires/sets/conflict-turn.png
+ sprites/wires/sets/conflict.png
+ sprites/wires/sets/shape-cross.png
+ sprites/wires/sets/shape-split.png
+ sprites/wires/sets/shape-turn.png
+ sprites/wires/sets/shape.png
pivotPoint
0.5,0.5
@@ -382,6 +394,11 @@
sprites/blueprints/constant_signal.png
+ sprites/blueprints/lever.png
+ sprites/blueprints/logic_gate-not.png
+ sprites/blueprints/logic_gate-or.png
+ sprites/blueprints/logic_gate-transistor.png
+ sprites/blueprints/logic_gate-xor.png
sprites/blueprints/logic_gate.png
sprites/blueprints/miner-chainable.png
sprites/blueprints/miner.png
@@ -395,7 +412,13 @@
sprites/blueprints/underground_belt_entry.png
sprites/blueprints/underground_belt_exit-tier2.png
sprites/blueprints/underground_belt_exit.png
+ sprites/blueprints/wire_tunnel.png
sprites/buildings/constant_signal.png
+ sprites/buildings/lever.png
+ sprites/buildings/logic_gate-not.png
+ sprites/buildings/logic_gate-or.png
+ sprites/buildings/logic_gate-transistor.png
+ sprites/buildings/logic_gate-xor.png
sprites/buildings/logic_gate.png
sprites/buildings/miner-chainable.png
sprites/buildings/rotater-ccw.png
@@ -406,6 +429,8 @@
sprites/buildings/underground_belt_entry.png
sprites/buildings/underground_belt_exit-tier2.png
sprites/buildings/underground_belt_exit.png
+ sprites/buildings/wire_tunnel.png
+ sprites/wires/lever_on.png
pivotPoint
0.5,0.5
@@ -439,11 +464,13 @@
sprites/blueprints/cutter.png
+ sprites/blueprints/filter.png
sprites/blueprints/mixer.png
sprites/blueprints/painter-mirrored.png
sprites/blueprints/painter.png
sprites/blueprints/splitter.png
sprites/blueprints/stacker.png
+ sprites/buildings/filter.png
sprites/buildings/painter-mirrored.png
pivotPoint
diff --git a/src/js/game/systems/wire.js b/src/js/game/systems/wire.js
index 8e940f7e..34af09f3 100644
--- a/src/js/game/systems/wire.js
+++ b/src/js/game/systems/wire.js
@@ -24,7 +24,7 @@ const logger = createLogger("wires");
let networkUidCounter = 0;
-const VERBOSE_WIRES = false;
+const VERBOSE_WIRES = G_IS_DEV && false;
export class WireNetwork {
constructor() {
@@ -319,11 +319,15 @@ export class WireSystem extends GameSystemWithFilter {
VERBOSE_WIRES &&
logger.log(" Searching for new targets at", tile.toString(), "and d=", directions);
+ // Go over all directions we should search for
for (let i = 0; i < directions.length; ++i) {
const direction = directions[i];
const offset = enumDirectionToVector[direction];
const searchTile = tile.add(offset);
+ // Store which tunnels we already visited to avoid infinite loops
+ const visitedTunnels = new Set();
+
const contents = this.root.map.getLayersContentsMultipleXY(searchTile.x, searchTile.y);
for (let k = 0; k < contents.length; ++k) {
const entity = contents[k];
@@ -359,19 +363,32 @@ export class WireSystem extends GameSystemWithFilter {
continue;
}
- result.push({
- entity,
- slot,
- });
+ if (!slot.linkedNetwork) {
+ result.push({
+ entity,
+ slot,
+ });
+ }
}
}
// Check if its a tunnel, if so, go to the forwarded item
if (entity.components.WireTunnel) {
- const forwardedTile = searchTile.add(offset);
- contents.push(
- ...this.root.map.getLayersContentsMultipleXY(forwardedTile.x, forwardedTile.y)
- );
+ if (!visitedTunnels.has(entity.uid)) {
+ const forwardedTile = entity.components.StaticMapEntity.origin.add(offset);
+ logger.log(
+ " Found tunnel",
+ entity.uid,
+ "at",
+ searchTile,
+ "-> forwarding to",
+ forwardedTile
+ );
+ contents.push(
+ ...this.root.map.getLayersContentsMultipleXY(forwardedTile.x, forwardedTile.y)
+ );
+ visitedTunnels.add(entity.uid);
+ }
}
}
}
@@ -605,8 +622,6 @@ export class WireSystem extends GameSystemWithFilter {
return;
}
- logger.log("Updating surrounding wire placement");
-
const metaWire = gMetaBuildingRegistry.findByClass(MetaWireBuilding);
// Compute affected area