extends SceneTree func _initialize() -> void: call_deferred("run") func run() -> void: var scenario: ScenarioDefinition = load("res://data/scenarios/three_cabinet_objective_test.tres") var edit := ScenarioEditSession.new() assert(edit.begin(scenario)) assert(edit.working_scenario.assignments[1].game_config.score_to_win == 500) edit.working_scenario.assignments[1].game_config.score_to_win = 600 edit.mark_dirty() assert(edit.is_dirty) assert(scenario.assignments[1].game_config.score_to_win == 500, "Editing must not mutate source") var frogger = load("res://games/frogger/Frogger.tscn").instantiate() root.add_child(frogger) frogger.configure({}) frogger.start_game() frogger.homes[2] = true frogger.phase = "home" frogger.phase_time = 0.0 frogger._physics_process(.01) assert(frogger.is_running, "Default Frogger must not win on one home") frogger.reset_game() frogger.configure({"homes_to_win": 1, "boards_to_win": 0}) frogger.start_game() frogger.homes[2] = true frogger.phase = "home" frogger.phase_time = 0.0 frogger._physics_process(.01) assert(not frogger.is_running and frogger.phase == "won") frogger.queue_free() var agent = load("res://core/network/managed_cabinet.gd").new() # Keep this isolated agent outside the tree: no network polling. var game := ArcadeGame.new() agent.add_child(game) agent.game = game game.configure({"test_auto_win_seconds": 5.0}) game.start_game() agent.event("started") agent._process(4.0) assert(game.is_running) agent.unload() var replacement := ArcadeGame.new() agent.add_child(replacement) agent.game = replacement replacement.start_game() agent.event("started") agent._process(20.0) assert(replacement.is_running, "Old timer must not affect the next game") agent.free() await process_frame print("PASS: default Frogger, configured home objective, editor copy isolation, and timer cancellation") quit()