add gamepad support to menus
This commit is contained in:
@@ -2,8 +2,13 @@ extends Control
|
||||
|
||||
signal open_settings
|
||||
|
||||
@onready var menu_buttons: Array[Button] = []
|
||||
var current_menu_index: int = 0
|
||||
var original_button_scales: Array[Vector2] = []
|
||||
|
||||
func _ready():
|
||||
DebugManager.log_info("MainMenu ready", "MainMenu")
|
||||
_setup_menu_navigation()
|
||||
|
||||
func _on_new_game_button_pressed():
|
||||
AudioManager.play_ui_click()
|
||||
@@ -19,3 +24,56 @@ func _on_exit_button_pressed():
|
||||
AudioManager.play_ui_click()
|
||||
DebugManager.log_info("Exit pressed", "MainMenu")
|
||||
get_tree().quit()
|
||||
|
||||
func _setup_menu_navigation():
|
||||
menu_buttons.clear()
|
||||
original_button_scales.clear()
|
||||
|
||||
menu_buttons.append($MenuContainer/NewGameButton)
|
||||
menu_buttons.append($MenuContainer/SettingsButton)
|
||||
menu_buttons.append($MenuContainer/ExitButton)
|
||||
|
||||
for button in menu_buttons:
|
||||
original_button_scales.append(button.scale)
|
||||
|
||||
_update_visual_selection()
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if event.is_action_pressed("move_up"):
|
||||
_navigate_menu(-1)
|
||||
elif event.is_action_pressed("move_down"):
|
||||
_navigate_menu(1)
|
||||
elif event.is_action_pressed("action_south"):
|
||||
_activate_current_button()
|
||||
elif event.is_action_pressed("options_menu"):
|
||||
AudioManager.play_ui_click()
|
||||
DebugManager.log_info("Options menu shortcut pressed", "MainMenu")
|
||||
open_settings.emit()
|
||||
elif event.is_action_pressed("quit_game"):
|
||||
AudioManager.play_ui_click()
|
||||
DebugManager.log_info("Quit game shortcut pressed", "MainMenu")
|
||||
get_tree().quit()
|
||||
|
||||
func _navigate_menu(direction: int):
|
||||
AudioManager.play_ui_click()
|
||||
current_menu_index = (current_menu_index + direction) % menu_buttons.size()
|
||||
if current_menu_index < 0:
|
||||
current_menu_index = menu_buttons.size() - 1
|
||||
_update_visual_selection()
|
||||
DebugManager.log_info("Menu navigation: index " + str(current_menu_index), "MainMenu")
|
||||
|
||||
func _activate_current_button():
|
||||
if current_menu_index >= 0 and current_menu_index < menu_buttons.size():
|
||||
var button = menu_buttons[current_menu_index]
|
||||
DebugManager.log_info("Activating button via keyboard/gamepad: " + button.text, "MainMenu")
|
||||
button.pressed.emit()
|
||||
|
||||
func _update_visual_selection():
|
||||
for i in range(menu_buttons.size()):
|
||||
var button = menu_buttons[i]
|
||||
if i == current_menu_index:
|
||||
button.scale = original_button_scales[i] * 1.1
|
||||
button.modulate = Color(1.2, 1.2, 1.0)
|
||||
else:
|
||||
button.scale = original_button_scales[i]
|
||||
button.modulate = Color.WHITE
|
||||
|
||||
Reference in New Issue
Block a user