- ElevatorService snapshot v2 carries the shaft-wide wait; v1 saves (written
with every elevator dynamic_cost 0) migrate by deriving it on load, and any
v2 mismatch, including all zeros, is rejected atomically. A genuine save
from 50ceca0 is kept as tests/fixtures/p14-03/legacy_rush_v1.
- A guest aboard a cabin no longer decides, leaves or despawns until the
elevator sets it down at a real landing; previously a rider told to leave
vanished from a moving cabin.
- test_route_wait_choice now proves the rush detour and route loss with a
worker who actually walks, every shared rider's arrival cell, service
elevator and stair congestion, legacy migration and a new-PID restart.
- Register completion markers for the seven suites added this session and
bring the P14 ledger in line with P14-02's completion.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
35 lines
1.9 KiB
Plaintext
35 lines
1.9 KiB
Plaintext
extends SceneTree
|
|
var n := 0
|
|
func c(rt, clock, k, p):
|
|
n += 1
|
|
var r: CommandResult = rt.submit_command(k, p, &"player", &"", 0, clock.absolute_minute, StringName("p1403.%d" % n))
|
|
if not r.is_success(): print("FAIL ", k, " ", r.message)
|
|
return r
|
|
func _initialize() -> void:
|
|
call_deferred("_run")
|
|
func _run() -> void:
|
|
var clock: Variant = load("res://autoload/game_clock.gd").new()
|
|
var state: Variant = load("res://autoload/game_state.gd").new()
|
|
var rt: Variant = load("res://autoload/simulation_runtime.gd").new()
|
|
clock.reset(1, 6, 0); state.reset(); rt.initialize(clock, state, 1403); clock.set_paused(true)
|
|
c(rt, clock, &"change_resources", {&"deltas": {&"gold": 30000, &"materials": 300}})
|
|
c(rt, clock, &"build_facility", {&"definition_id": &"guest_elevator", &"origin": Vector3i(0,0,0)})
|
|
c(rt, clock, &"build_facility", {&"definition_id": &"guest_elevator", &"origin": Vector3i(4,0,0)})
|
|
clock.advance_minutes(360)
|
|
c(rt, clock, &"build_facility", {&"definition_id": &"guest_elevator", &"origin": Vector3i(0,2,0)})
|
|
for x in [2, 3]: c(rt, clock, &"build_facility", {&"definition_id": &"guest_corridor", &"origin": Vector3i(x,1,0)})
|
|
clock.advance_minutes(360)
|
|
clock.advance_minutes(10 - int(clock.absolute_minute) % 10 + 1)
|
|
for i in 12:
|
|
var gid := StringName("rush_%02d" % i)
|
|
c(rt, clock, &"spawn_guest", {&"guest_id": gid, &"guest_type_id": &"traveler", &"options": {&"current_cell": Vector3i(0,0,0)}})
|
|
var t = rt.elevators.request_trip(StringName("guest:%s" % gid), Vector3i(0,0,0), Vector3i(0,3,0), clock.absolute_minute)
|
|
if not t.ok: print("TRIPFAIL ", t)
|
|
var dyn := []
|
|
for row in rt.path_service.create_snapshot()[&"connectors"]:
|
|
if String(row[&"id"]).begins_with("transport."): dyn.append(int(row[&"dynamic_cost"]))
|
|
print("LEGACY dynamic costs ", dyn)
|
|
var out := OS.get_environment("LEGACY_OUT")
|
|
print("SAVE ", SaveService.save_snapshot(out, rt.create_snapshot())[&"ok"], " ", out)
|
|
rt.free(); clock.free(); state.free(); quit(0)
|