diff --git a/src/js/game/hud/parts/blueprint.js b/src/js/game/hud/parts/blueprint.js index 6dcd4c43..fbd00484 100644 --- a/src/js/game/hud/parts/blueprint.js +++ b/src/js/game/hud/parts/blueprint.js @@ -176,6 +176,7 @@ export class Blueprint { tryPlace(root, tile) { return root.logic.performBulkOperation(() => { let anyPlaced = false; + const beltsToRegisterLater = []; for (let i = 0; i < this.entities.length; ++i) { let placeable = true; const entity = this.entities[i]; @@ -215,10 +216,22 @@ export class Blueprint { clone.components.StaticMapEntity.origin.addInplace(tile); root.map.placeStaticEntity(clone); - root.entityMgr.registerEntity(clone); + + // Registering a belt immediately triggers a recalculation of surrounding belt + // directions, which is no good when not all belts have been placed. To resolve + // this, only register belts after all entities have been placed. + if (!clone.components.Belt) { + root.entityMgr.registerEntity(clone); + } else { + beltsToRegisterLater.push(clone); + } anyPlaced = true; } } + + for (let i = 0; i < beltsToRegisterLater.length; i++) { + root.entityMgr.registerEntity(beltsToRegisterLater[i]); + } return anyPlaced; }); }