class_name MainMenu extends Panel @onready var new_game_button: Button = $PanelContainer/NewGameButton @onready var continue_button: Button = $PanelContainer/ContinueGameButton @onready var load_game_button: Button = $PanelContainer/LoadGameButton @onready var settings_button: Button = $PanelContainer/SettingsButton @onready var settings_popup: SettingsPopup = %SettingsPopup @onready var credits_button: Button = $PanelContainer/CreditsButton @onready var quit_button: Button = $PanelContainer/QuitButton @onready var save_game_list: SaveGameList = %SaveGameList signal success func execute() -> void: print_debug("main_menu.gd: execute()") modulate.a = 0.0 assert(is_node_ready(), "MainMenu node not ready yet! (???)") if State.save_game == null or State.save_game.current_room == 0: continue_button.visible = false continue_button.disabled = true new_game_button.theme_type_variation = "H1Button" else: continue_button.visible = true continue_button.disabled = false new_game_button.theme_type_variation = "" _activate() await _appear() await success await _vanish() # Called when the node enters the scene tree for the first time. func _ready() -> void: print_debug("main_menu.gd: ready()") _deactivate() continue_button.pressed.connect(_start_game) new_game_button.pressed.connect(_new_game) load_game_button.pressed.connect(_load_save_game) settings_button.pressed.connect(settings_popup.show_settings) #credits_button.pressed.connect(_choose.bind("credits")) #FIXME: Needs some other encoding, like path quit_button.pressed.connect(get_tree().quit) func _new_game() -> void: print_debug("main_menu.gd: start_new_game()") State.save_game = SaveGame.new() _start_game() func _start_game() -> void: print_debug("main_menu.gd: _start_game()") success.emit() await Main.start_game(State.save_game) func _load_save_game() -> void: print_debug("main_menu.gd: _load_save_game()") var save: SaveGame = await save_game_list.pick_save_slot() if (save != null): State.save_game = save _deactivate() _start_game() else: _activate() func _activate() -> void: load_game_button.disabled = not save_game_list.has_more_saves() continue_button.disabled = (State.save_game == null or State.save_game.is_empty) load_game_button.disabled = not save_game_list.has_more_saves() for child: Control in $PanelContainer.get_children(): child.focus_mode = Control.FOCUS_ALL child.modulate = Color.WHITE if continue_button.visible: continue_button.grab_focus() else: new_game_button.grab_focus() visible = true func _deactivate() -> void: for child: Control in $PanelContainer.get_children(): child.focus_mode = FOCUS_NONE child.modulate = Color.WEB_GRAY func _appear() -> void: modulate.a = 0 visible = true show() var tween := create_tween() tween.tween_property(self, "modulate:a", 1.0, 0.5) await tween.finished func _vanish() -> void: var tween := create_tween() tween.tween_property(self, "modulate:a", 0.0, 0.5) await tween.finished hide() visible = false