From f69af63aa3d6e47547a6146a7888f566b3978d27 Mon Sep 17 00:00:00 2001 From: tobspr Date: Fri, 14 Aug 2020 07:21:49 +0200 Subject: [PATCH] Fix wires tunnel bug --- res_raw/atlas.tps | 27 +++++++++++++++++++++++++++ src/js/game/systems/wire.js | 37 ++++++++++++++++++++++++++----------- 2 files changed, 53 insertions(+), 11 deletions(-) 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