extends SceneTree const WorldSimulation = preload("res://src/simulation/world_simulation.gd") func _initialize() -> void: var packed := load("res://scenes/main.tscn") as PackedScene var demo := packed.instantiate() root.add_child.call_deferred(demo) await process_frame await process_frame demo.call("_start_game") _build_cells(demo, WorldSimulation.KIND_BELT, [ Vector2i(-5, 0), Vector2i(-4, 0), Vector2i(-3, 0), Vector2i(-2, 0), Vector2i(0, 0), Vector2i(2, 0), Vector2i(3, 0), Vector2i(4, 0), Vector2i(5, 0), ]) _build_cells(demo, WorldSimulation.KIND_MANA_PIPE, [ Vector2i(0, 4), Vector2i(0, 3), Vector2i(0, 2), Vector2i(0, 1), ]) var simulation: WorldSimulation = demo.get("simulation") var building_count_before_overlap := simulation.buildings.size() demo.set("hovered_cell", Vector2i(-5, 0)) demo.set("hover_is_valid", true) demo.call("_try_place_selected") var overlap_was_rejected := simulation.buildings.size() == building_count_before_overlap demo.call("_try_remove_hovered") var removal_succeeded := simulation.get_building_at(Vector2i(-5, 0)).is_empty() _build_cells(demo, WorldSimulation.KIND_BELT, [Vector2i(-5, 0)]) demo.call("_begin_bridge_config") _click_bridge_cell(demo, Vector2i(-1, 1)) _click_bridge_cell(demo, Vector2i(-2, 0)) _click_bridge_cell(demo, Vector2i(0, 0)) demo.call("_begin_bridge_config") _click_bridge_cell(demo, Vector2i(1, 1)) _click_bridge_cell(demo, Vector2i(0, 0)) _click_bridge_cell(demo, Vector2i(2, 0)) # Selecting a locked processor must expose inspection fields without # mutating the running factory. demo.set("hovered_cell", Vector2i(-1, 1)) demo.set("hover_is_valid", true) demo.call("_try_place_selected") var selected_id := int(demo.get("selected_building_id")) var inspect_before := simulation.state_fingerprint() var inspect_report: Dictionary = simulation.inspect_building(selected_id) var inspect_mutated := inspect_before != simulation.state_fingerprint() for _tick in range(1800): simulation.step() var anchor_machine_id := int(demo.get("anchor_machine_id")) var charger_machine_id := int(demo.get("charger_machine_id")) var machine: Dictionary = simulation.buildings[anchor_machine_id] var charger: Dictionary = simulation.buildings[charger_machine_id] var failures: Array[String] = [] if bool(demo.get("bridge_mode")): failures.append("Bridge setup did not leave configuration mode.") if not overlap_was_rejected: failures.append("Grid placement allowed an overlapping building.") if not removal_succeeded: failures.append("Player removal did not clear grid occupancy.") if not bool(machine["bridge_configured"]): failures.append("Anchor machine did not retain bridge endpoints.") if not bool(charger["bridge_configured"]): failures.append("Charger did not retain bridge endpoints.") if not bool(machine["mana_powered"]): failures.append("Player-built mana pipe route did not power the refinery.") if not bool(charger["mana_powered"]): failures.append("Player-built mana pipe route did not power the charger.") if selected_id != anchor_machine_id: failures.append("Clicking the refinery did not select it for inspection.") if inspect_report.is_empty() or inspect_report.get("recipe", {}).is_empty(): failures.append("Selection inspection did not return a recipe payload.") if inspect_mutated: failures.append("Inspection mutated simulation state.") if simulation.get_charged_count() < 15: failures.append("Completed player flow did not sustain charged-crystal output.") if not simulation.is_demo_complete(): failures.append("Sustained charged-crystal intake did not mark the demo complete.") if failures.is_empty(): print("DEMO_FLOW_OK charged=%d refine_bridge=%s->%s charger_bridge=%s->%s mana_network=%d" % [ simulation.get_charged_count(), str(machine["input_cell"]), str(machine["output_cell"]), str(charger["input_cell"]), str(charger["output_cell"]), int(machine["mana_network"]), ]) quit(0) else: for failure in failures: push_error(failure) quit(1) func _build_cells(demo: Node, kind: StringName, cells: Array[Vector2i]) -> void: demo.call("_select_tool", kind) for cell in cells: demo.set("hovered_cell", cell) demo.set("hover_is_valid", true) demo.call("_try_place_selected") func _click_bridge_cell(demo: Node, cell: Vector2i) -> void: demo.set("hovered_cell", cell) demo.set("hover_is_valid", true) demo.call("_handle_bridge_click")