grunk/src/ui/menus/pause_menu/pause_menu.gd

83 lines
1.8 KiB
GDScript3
Raw Normal View History

2025-03-22 17:16:17 -06:00
extends Control
## Menu shown in-game when the user presses pause.
2025-04-22 23:22:54 -06:00
@export_category("Game Scenes")
@export_file("*.tscn") var title_scene: String
2025-03-22 17:16:17 -06:00
@export var settings_scene: PackedScene
2025-04-22 23:22:54 -06:00
@export var debug_scene: PackedScene
2025-03-22 17:16:17 -06:00
var _freeze_input := false
2025-03-22 19:16:52 -06:00
@onready var menu_list: Control = %MenuList
@onready var quit_confirm: Control = %QuitConfirm
@onready var end_game_confirm: Control = %EndGameConfirm
@onready var settings_container: Container = %SettingsContainer
2025-03-22 17:16:17 -06:00
2025-04-22 23:22:54 -06:00
@onready var debug_button: Button = %DebugButton
@onready var debug_container: MarginContainer = %DebugContainer
2025-03-22 17:16:17 -06:00
func _ready() -> void:
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
Engine.time_scale = 1.0
2025-04-22 23:22:54 -06:00
if Game.settings.enable_debug_menu:
debug_button.show()
2025-03-22 17:16:17 -06:00
func _unhandled_key_input(event: InputEvent) -> void:
if not _freeze_input and event.is_action_pressed("pause"):
get_viewport().set_input_as_handled()
resume()
func _unhide() -> void:
menu_list.show()
func _hide() -> void:
menu_list.hide()
func resume() -> void:
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
queue_free()
func settings() -> void:
var instance: Control = settings_scene.instantiate()
settings_container.add_child(instance)
instance.tree_exited.connect(_unhide)
_hide()
func quit() -> void:
quit_confirm.show()
func cancel_quit() -> void:
quit_confirm.hide()
func confirm_quit() -> void:
get_tree().root.propagate_notification(NOTIFICATION_WM_CLOSE_REQUEST)
func end_game() -> void:
end_game_confirm.show()
func cancel_end_game() -> void:
end_game_confirm.hide()
func confirm_end_game() -> void:
2025-04-22 23:22:54 -06:00
# TODO transition
Game.instance.queue_scene(title_scene)
func debug_menu() -> void:
var instance: Control = debug_scene.instantiate()
debug_container.add_child(instance)
instance.tree_exited.connect(_unhide)
_hide()