extends Control @onready var resume_button: Button = $PauseButtons/ResumeButton @onready var save_button: Button = $PauseButtons/SaveButton @onready var quit_button: Button = $PauseButtons/QuitToMenuButton var player: Node = null func _ready() -> void: visible = false process_mode = Node.PROCESS_MODE_ALWAYS if resume_button: resume_button.pressed.connect(_on_resume) if save_button: save_button.pressed.connect(_on_save) if quit_button: quit_button.pressed.connect(_on_quit_to_menu) func _input(event: InputEvent) -> void: if not event.is_action_pressed("ui_cancel"): return var banner := get_node_or_null("/root/Node3D/HUD/ScrambleBanner") if banner and banner.visible: return if visible or get_tree().paused: _on_resume() get_viewport().set_input_as_handled() return var p := get_tree().get_first_node_in_group("player") if p == null: p = get_node_or_null("/root/Node3D/Player") if p: open_pause(p) get_viewport().set_input_as_handled() func open_pause(player_ref: Node) -> void: player = player_ref visible = true Input.mouse_mode = Input.MOUSE_MODE_VISIBLE get_tree().paused = true func _on_resume() -> void: visible = false get_tree().paused = false Input.mouse_mode = Input.MOUSE_MODE_CAPTURED func _on_save() -> void: if player: GameState.save_game(player) else: var p := get_tree().get_first_node_in_group("player") if p: GameState.save_game(p) func _on_quit_to_menu() -> void: get_tree().paused = false Input.mouse_mode = Input.MOUSE_MODE_VISIBLE get_tree().change_scene_to_file("res://Scenes/main_menu.tscn")