extends SceneTree var failures := 0 func check(ok: bool, message: String) -> void: if not ok: failures += 1 push_error(message) func packet(id: String, kind := "input", device := "cab1_btn_ylw", value: Variant = true, age := 0) -> Dictionary: return {"fresh": true, "events": [{"id": id, "kind": kind, "device": device, "value": value, "age_ms": age}], "devices": [{"id": device, "kind": kind, "value": false if kind == "input" else value, "age_ms": 0}]} func _initialize() -> void: call_deferred("run") func run() -> void: var game = load("res://games/pacman/pacman.gd").new() root.add_child(game) game.set_physics_process(false) game.configure({"power_on_device": "cab1_btn_ylw", "rfid_credit_device": "cab1_rfid1"}) check(game.power_state == "off" and not game.start_game(), "Prepared cabinet waits for power") game.receive_device_feedback(packet("old")) game.receive_device_feedback(packet("stale", "input", "cab1_btn_ylw", true, 5000)) game.receive_device_feedback(packet("wrong", "input", "other")) game.receive_device_feedback(packet("early-card", "rfid", "cab1_rfid1", "12345678")) check(game.power_state == "off" and game.credits == 0, "Historical/stale/wrong inputs and early cards are ignored") game.receive_device_feedback(packet("tap")) check(game.power_state == "booting", "A quick press released before polling still powers on") check(not game.power_on() and not game.start_game(), "Boot cannot be restarted or skipped") game._physics_process(3.99) game.receive_device_feedback(packet("boot-card", "rfid", "cab1_rfid1", "12345678")) check(game.power_state == "booting" and game.credits == 0, "Full four-second boot gates RFID") game._physics_process(0.02) check(game.power_state == "ready" and game.model.state == "idle", "Boot enters character intro, not gameplay") game.receive_device_feedback(packet("boot-card", "rfid", "cab1_rfid1", "12345678")) check(game.credits == 0, "First post-boot snapshot discards buffered scans") game.receive_device_feedback(packet("new-card", "rfid", "cab1_rfid1", "12345678")) check(game.credits == 1 and game.start_game(), "New scan then Start begins play") game.receive_device_feedback(packet("playing-press")) check(game.is_running and game.power_state == "ready", "Button during play cannot restart the cabinet") game.power_off() check(not game.is_running and game.credits == 0 and not game.start_game(), "Power off clears gameplay and credits") game.queue_free() await process_frame print("PACMAN POWER: ", "PASS" if failures == 0 else "FAIL") quit(1 if failures else 0)