Preserve production code, regression fixtures, audio assets and provenance, test infrastructure, and the original-completion plan and progress ledger. Final game and Windows acceptance remain pending; excluded local artifacts and native experiments are not part of this snapshot.
53 lines
3.1 KiB
GDScript
53 lines
3.1 KiB
GDScript
extends SceneTree
|
|
const Demo := preload("res://scripts/ui/pixel_tower_demo.gd")
|
|
var checks := 0
|
|
var failures := 0
|
|
var runtime: Variant
|
|
func expect(ok: bool, label: String) -> void:
|
|
checks += 1
|
|
if not ok: failures += 1; push_error(label)
|
|
func _initialize() -> void: call_deferred("run")
|
|
func compare(label: String) -> void:
|
|
for facility: FacilityInstance in runtime.facility_service.get_instances():
|
|
expect(runtime.is_facility_reachable(facility.instance_id) == bool(runtime.get_facility_access_report(facility.instance_id)[&"reachable"]), label + ": " + String(facility.instance_id))
|
|
func run() -> void:
|
|
runtime = root.get_node("SimulationRuntime")
|
|
var clock: Variant = root.get_node("GameClock")
|
|
var state: Variant = root.get_node("GameState")
|
|
# Disposable Demo fixture funds exact Doran signing_cost 300; DEFAULT5000 and paid hire stay unchanged.
|
|
clock.reset(1,6,0); state.reset();state.resources[&"gold"] += 300; runtime.initialize(clock,state,424242); clock.set_paused(true)
|
|
runtime.configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false})
|
|
var demo := Demo.new()
|
|
expect(await demo.prepare(runtime,clock,self), "prepare actual multi-floor topology")
|
|
if failures: quit(failures); return
|
|
compare("connected topology")
|
|
expect(not runtime.is_facility_reachable(&"missing"), "missing facility is unreachable")
|
|
var checkpoint: Dictionary = runtime.create_snapshot()
|
|
var facility: FacilityInstance = runtime.facility_service.get_instances()[0]
|
|
facility.access_available = false
|
|
expect(not runtime.is_facility_reachable(facility.instance_id), "operating access override is honored")
|
|
expect(runtime.restore_snapshot(checkpoint), "restore access override")
|
|
# Block every graph cell, including all candidate public entrances. Do not
|
|
# leave a second entrance that can legitimately reach the same destination.
|
|
for cell: Vector3i in runtime.world_service.get_walkable_cells():
|
|
if runtime.path_service.has_cell(cell): runtime.path_service.set_cell_temporary_block(cell,true)
|
|
compare("blocked topology")
|
|
for item: FacilityInstance in runtime.facility_service.get_instances():
|
|
expect(not runtime.is_facility_reachable(item.instance_id), "blocked entrance cannot report reachable")
|
|
expect(runtime.restore_snapshot(checkpoint), "restore graph after temporary blocks")
|
|
compare("restored topology")
|
|
var measurements := {}
|
|
for method: StringName in [&"get_facility_access_report", &"is_facility_reachable"]: measurements[String(method)] = []
|
|
for attempt in 100:
|
|
var methods: Array[StringName] = [&"get_facility_access_report", &"is_facility_reachable"]
|
|
if attempt % 2: methods.reverse()
|
|
for method: StringName in methods:
|
|
var start := Time.get_ticks_usec()
|
|
for item: FacilityInstance in runtime.facility_service.get_instances(): runtime.call(method,item.instance_id)
|
|
measurements[String(method)].append(Time.get_ticks_usec()-start)
|
|
var output := OS.get_environment("THE_TREE_REACHABILITY_PROFILE")
|
|
if not output.is_empty():
|
|
var file := FileAccess.open(output,FileAccess.WRITE)
|
|
file.store_string(JSON.stringify(measurements," "));file.close()
|
|
print("Facility reachability: %d checks, %d failures" % [checks,failures]);quit(failures)
|