extends CanvasLayer ## Between-rooms layer: node fork (CARD vs SCRAP), card draft (3 ## options + scrap decline — canon pick anatomy, compressed), and the ## run tally. Pauses the world while active; runs ALWAYS so it can ## read input. Number keys 1-4 select. Greybox dev UI — draw calls ## and letters, no art. signal fork_chosen(kind: String) signal draft_chosen(card_id: int) signal restart_requested const MODE_NONE := "" const MODE_FORK := "fork" const MODE_DRAFT := "draft" const MODE_TALLY := "tally" @export var fork_scrap_reward := 8 @export var draft_decline_scrap := 4 var mode := MODE_NONE var active := false var draft_options: Array[int] = [] var tally_stats := {} var tally_failed := false func _ready() -> void: add_to_group("interstitial") process_mode = Node.PROCESS_MODE_ALWAYS layer = 3 visible = false func open_fork() -> void: _open(MODE_FORK) func open_draft(options: Array[int]) -> void: draft_options = options _open(MODE_DRAFT) func open_tally(stats: Dictionary, failed: bool) -> void: tally_stats = stats tally_failed = failed _open(MODE_TALLY) func close() -> void: mode = MODE_NONE active = false visible = false get_tree().paused = false func _open(m: String) -> void: mode = m active = true visible = true get_tree().paused = true $HUD.queue_redraw() func _process(_delta: float) -> void: if not active: return $HUD.queue_redraw() match mode: MODE_FORK: if Input.is_action_just_pressed("opt_1"): close() fork_chosen.emit("card") elif Input.is_action_just_pressed("opt_2"): close() fork_chosen.emit("scrap") MODE_DRAFT: for i in draft_options.size(): if Input.is_action_just_pressed("opt_%d" % (i + 1)): close() draft_chosen.emit(draft_options[i]) return if Input.is_action_just_pressed("opt_4"): close() draft_chosen.emit(-1) MODE_TALLY: if Input.is_action_just_pressed("opt_1"): close() restart_requested.emit()