extends Control class_name MenuManager @onready var menus = { "main": $MainMenu, "credits": $CreditsMenu, "settings": $SettingsMenu } @onready var transition = $SceneTransition @onready var hover_sound = $Hover @onready var click_sound = $Click var menu_stack = ["main"] func _ready(): Global.focus_first_button(menus[menu_stack.back()]) for m in menus.values(): connect_button_sounds(m) if Global.fade_next: Global.fade_next = false transition.fade_in() func _input(_event): if Input.is_action_just_pressed("ui_cancel") && menu_stack.size() > 1: play_click() go_back() func goto(menu_name: String): show_menu(menu_name) menu_stack.push_back(menu_name) print("Go to called. Stack: " + str(menu_stack)) func go_back(): menu_stack.pop_back() if menu_stack.is_empty(): Global.showError("Menu stack empty") show_menu(menu_stack.back()) print("Go back called. Stack: " + str(menu_stack)) func show_menu(menu_name: String): await transition.fade_out() for k in menus.keys(): if k == menu_name: menus[k].show() if menus[k].has_method("prepare"): menus[k].prepare() # Optionally run some code Global.focus_first_button(menus[k]) else: menus[k].hide() await transition.fade_in() func connect_button_sounds(node: Node): if node is Button: node.pressed.connect(play_click) for c in node.get_children(): connect_button_sounds(c) func play_click(): click_sound.play()