extends CanvasLayer @onready var task_list: VBoxContainer = $TasksPanel/Margin/VBox/TaskList @onready var detection_bar: ProgressBar = $Detection/DetectionBar @onready var win_panel: Control = $WinPanel @onready var lose_panel: Control = $LosePanel @onready var settings_panel = $SettingsPanel @onready var next_level_button: Button = $WinPanel/Center/VBox/NextLevelButton const LEVEL_ORDER: Array[String] = [ "res://Rooms/Livingroom/livingroom.tscn", "res://Rooms/Kitchen/kitchen.tscn", "res://Rooms/Floor/floor.tscn", ] func _ready() -> void: process_mode = Node.PROCESS_MODE_ALWAYS win_panel.visible = false lose_panel.visible = false GameManager.tasks_changed.connect(_refresh_tasks) GameManager.detection_changed.connect(_on_detection_changed) GameManager.game_won.connect(_on_game_won) GameManager.game_lost.connect(_on_game_lost) $WinPanel/Center/VBox/RestartButton.pressed.connect(_on_restart) $WinPanel/Center/VBox/MainMenuButton.pressed.connect(_on_main_menu_pressed) $LosePanel/Center/VBox/RestartButton.pressed.connect(_on_restart) $LosePanel/Center/VBox/MainMenuButton.pressed.connect(_on_main_menu_pressed) next_level_button.pressed.connect(_on_next_level) _refresh_tasks() _on_detection_changed(0.0) func _refresh_tasks() -> void: for child in task_list.get_children(): child.queue_free() for t in GameManager.tasks: var label := Label.new() label.text = ("[x] " if t.done else "[ ] ") + str(t.description) if t.done: label.modulate = Color(0.5, 0.9, 0.5) task_list.add_child(label) func _on_detection_changed(value: float) -> void: detection_bar.value = value * 100.0 func _on_game_won() -> void: win_panel.visible = true # Hide the next-level button if we are on the last level. var current := get_tree().current_scene.scene_file_path var idx := LEVEL_ORDER.find(current) next_level_button.visible = idx >= 0 and idx < LEVEL_ORDER.size() - 1 func _on_game_lost() -> void: lose_panel.visible = true func _on_restart() -> void: GameManager.restart() func _on_next_level() -> void: var current := get_tree().current_scene.scene_file_path var idx := LEVEL_ORDER.find(current) if idx >= 0 and idx < LEVEL_ORDER.size() - 1: GameManager.reset_level() get_tree().change_scene_to_file(LEVEL_ORDER[idx + 1]) func _on_button_pressed() -> void: settings_panel.open() func _on_main_menu_pressed() -> void: get_tree().paused = false GameManager.reset_level() get_tree().change_scene_to_file("res://UI/main_menu.tscn")