Fix wires tunnel bug

This commit is contained in:
tobspr 2020-08-14 07:21:49 +02:00
parent fd7ae79971
commit f69af63aa3
2 changed files with 53 additions and 11 deletions

View File

@ -367,6 +367,18 @@
<key type="filename">sprites/buildings/wire-split.png</key>
<key type="filename">sprites/buildings/wire-turn.png</key>
<key type="filename">sprites/buildings/wire.png</key>
<key type="filename">sprites/wires/sets/color-cross.png</key>
<key type="filename">sprites/wires/sets/color-split.png</key>
<key type="filename">sprites/wires/sets/color-turn.png</key>
<key type="filename">sprites/wires/sets/color.png</key>
<key type="filename">sprites/wires/sets/conflict-cross.png</key>
<key type="filename">sprites/wires/sets/conflict-split.png</key>
<key type="filename">sprites/wires/sets/conflict-turn.png</key>
<key type="filename">sprites/wires/sets/conflict.png</key>
<key type="filename">sprites/wires/sets/shape-cross.png</key>
<key type="filename">sprites/wires/sets/shape-split.png</key>
<key type="filename">sprites/wires/sets/shape-turn.png</key>
<key type="filename">sprites/wires/sets/shape.png</key>
<struct type="IndividualSpriteSettings">
<key>pivotPoint</key>
<point_f>0.5,0.5</point_f>
@ -382,6 +394,11 @@
<false/>
</struct>
<key type="filename">sprites/blueprints/constant_signal.png</key>
<key type="filename">sprites/blueprints/lever.png</key>
<key type="filename">sprites/blueprints/logic_gate-not.png</key>
<key type="filename">sprites/blueprints/logic_gate-or.png</key>
<key type="filename">sprites/blueprints/logic_gate-transistor.png</key>
<key type="filename">sprites/blueprints/logic_gate-xor.png</key>
<key type="filename">sprites/blueprints/logic_gate.png</key>
<key type="filename">sprites/blueprints/miner-chainable.png</key>
<key type="filename">sprites/blueprints/miner.png</key>
@ -395,7 +412,13 @@
<key type="filename">sprites/blueprints/underground_belt_entry.png</key>
<key type="filename">sprites/blueprints/underground_belt_exit-tier2.png</key>
<key type="filename">sprites/blueprints/underground_belt_exit.png</key>
<key type="filename">sprites/blueprints/wire_tunnel.png</key>
<key type="filename">sprites/buildings/constant_signal.png</key>
<key type="filename">sprites/buildings/lever.png</key>
<key type="filename">sprites/buildings/logic_gate-not.png</key>
<key type="filename">sprites/buildings/logic_gate-or.png</key>
<key type="filename">sprites/buildings/logic_gate-transistor.png</key>
<key type="filename">sprites/buildings/logic_gate-xor.png</key>
<key type="filename">sprites/buildings/logic_gate.png</key>
<key type="filename">sprites/buildings/miner-chainable.png</key>
<key type="filename">sprites/buildings/rotater-ccw.png</key>
@ -406,6 +429,8 @@
<key type="filename">sprites/buildings/underground_belt_entry.png</key>
<key type="filename">sprites/buildings/underground_belt_exit-tier2.png</key>
<key type="filename">sprites/buildings/underground_belt_exit.png</key>
<key type="filename">sprites/buildings/wire_tunnel.png</key>
<key type="filename">sprites/wires/lever_on.png</key>
<struct type="IndividualSpriteSettings">
<key>pivotPoint</key>
<point_f>0.5,0.5</point_f>
@ -439,11 +464,13 @@
<false/>
</struct>
<key type="filename">sprites/blueprints/cutter.png</key>
<key type="filename">sprites/blueprints/filter.png</key>
<key type="filename">sprites/blueprints/mixer.png</key>
<key type="filename">sprites/blueprints/painter-mirrored.png</key>
<key type="filename">sprites/blueprints/painter.png</key>
<key type="filename">sprites/blueprints/splitter.png</key>
<key type="filename">sprites/blueprints/stacker.png</key>
<key type="filename">sprites/buildings/filter.png</key>
<key type="filename">sprites/buildings/painter-mirrored.png</key>
<struct type="IndividualSpriteSettings">
<key>pivotPoint</key>

View File

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