|
## Handle changing of pause menus
|
|
class_name PauseMenu
|
|
extends Panel
|
|
|
|
|
|
signal open_menu(menu_name: String)
|
|
|
|
|
|
@onready var menu_mapping: Dictionary[String, BaseMenu] = {
|
|
"MainMenu": $MainMenu,
|
|
"SettingsMenu": $SettingsMenu,
|
|
"SavesMenu": $SavesMenu,
|
|
}
|
|
|
|
var _active_menu: String = "MainMenu"
|
|
var _next_menu: String = ""
|
|
|
|
|
|
func _ready() -> void:
|
|
open_menu.connect(_on_change_menu)
|
|
|
|
for menu: BaseMenu in get_children():
|
|
menu.animation_player.animation_finished.connect(_on_animation_finished)
|
|
menu.pause_menu = self
|
|
menu.init()
|
|
|
|
SaveGameManager.load_save.connect(_on_load_save)
|
|
SaveGameManager.create_save.connect(_on_create_save)
|
|
|
|
func _unhandled_input(event: InputEvent) -> void:
|
|
if event.is_action_pressed("ui_cancel") and !visible:
|
|
_open_pause_menu()
|
|
elif event.is_action_pressed("ui_cancel") and visible and _active_menu == "MainMenu":
|
|
menu_mapping["MainMenu"].animation_player.play("hide")
|
|
elif event.is_action_pressed("ui_cancel"):
|
|
open_menu.emit("MainMenu")
|
|
|
|
|
|
## The animation to show the next menu will take place in _on_animation_finished()
|
|
func _change_menu(menu_name: String) -> void:
|
|
visible = true
|
|
_next_menu = menu_name
|
|
if _next_menu == "":
|
|
menu_mapping["MainMenu"].animation_player.play("hide")
|
|
else:
|
|
menu_mapping[_active_menu].animation_player.play("hide")
|
|
|
|
func _close_pause_menu() -> void:
|
|
visible = false
|
|
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
|
_next_menu = ""
|
|
SignalManager.resume_game.emit()
|
|
|
|
func _open_pause_menu() -> void:
|
|
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
|
SignalManager.pause_game.emit()
|
|
menu_mapping["MainMenu"].animation_player.play("show")
|
|
|
|
|
|
## When the hide animation finished, we can move on to opening the next menu
|
|
func _on_animation_finished(animation_name: String) -> void:
|
|
if animation_name == "hide" and _next_menu == "":
|
|
_active_menu = "MainMenu"
|
|
_close_pause_menu()
|
|
elif animation_name == "hide":
|
|
_active_menu = _next_menu
|
|
_next_menu = ""
|
|
menu_mapping[_active_menu].animation_player.play("show")
|
|
|
|
func _on_change_menu(menu_name: String) -> void:
|
|
_change_menu(menu_name)
|
|
|
|
func _on_create_save(_save: String) -> void:
|
|
menu_mapping["SavesMenu"].reset_menu()
|
|
_close_pause_menu()
|
|
|
|
func _on_load_save(_save: String) -> void:
|
|
menu_mapping["SavesMenu"].reset_menu()
|
|
_close_pause_menu()
|