add gamepad support to menus
This commit is contained in:
118
scenes/ui/components/LanguageSelector.gd
Normal file
118
scenes/ui/components/LanguageSelector.gd
Normal file
@@ -0,0 +1,118 @@
|
||||
@tool
|
||||
extends Control
|
||||
class_name LanguageSelector
|
||||
|
||||
signal language_changed(new_language: String)
|
||||
|
||||
@onready var left_button: Button = $LanguageLeftButton
|
||||
@onready var right_button: Button = $LanguageRightButton
|
||||
@onready var language_display: Label = $LanguageDisplay
|
||||
|
||||
@export var settings_manager: Node = SettingsManager
|
||||
@export var localization_manager: Node = LocalizationManager
|
||||
|
||||
var language_codes: Array[String] = []
|
||||
var original_scale: Vector2
|
||||
var original_modulate: Color
|
||||
var is_highlighted: bool = false
|
||||
|
||||
func _ready():
|
||||
DebugManager.log_info("LanguageSelector ready", "LanguageSelector")
|
||||
|
||||
# Store original visual properties
|
||||
original_scale = scale
|
||||
original_modulate = modulate
|
||||
|
||||
# Connect button signals
|
||||
if left_button and not left_button.pressed.is_connected(_on_left_button_pressed):
|
||||
left_button.pressed.connect(_on_left_button_pressed)
|
||||
|
||||
if right_button and not right_button.pressed.is_connected(_on_right_button_pressed):
|
||||
right_button.pressed.connect(_on_right_button_pressed)
|
||||
|
||||
# Initialize language data
|
||||
_load_language_data()
|
||||
_update_language_display()
|
||||
|
||||
func _load_language_data():
|
||||
if not settings_manager:
|
||||
settings_manager = SettingsManager
|
||||
|
||||
var languages_data = settings_manager.get_languages_data()
|
||||
if languages_data.has("languages"):
|
||||
language_codes.clear()
|
||||
for lang_code in languages_data.languages.keys():
|
||||
language_codes.append(lang_code)
|
||||
DebugManager.log_info("Loaded %d languages" % language_codes.size(), "LanguageSelector")
|
||||
|
||||
func _update_language_display():
|
||||
if not settings_manager:
|
||||
return
|
||||
|
||||
var current_lang = settings_manager.get_setting("language")
|
||||
var languages_data = settings_manager.get_languages_data()
|
||||
|
||||
if languages_data.has("languages") and languages_data.languages.has(current_lang):
|
||||
language_display.text = languages_data.languages[current_lang]["display_name"]
|
||||
else:
|
||||
language_display.text = current_lang if current_lang else "Unknown"
|
||||
|
||||
func change_language(direction: int):
|
||||
if language_codes.size() == 0:
|
||||
DebugManager.log_warn("No languages available", "LanguageSelector")
|
||||
return
|
||||
|
||||
var current_lang = settings_manager.get_setting("language")
|
||||
var current_index = language_codes.find(current_lang)
|
||||
if current_index < 0:
|
||||
current_index = 0
|
||||
|
||||
var new_index = (current_index + direction) % language_codes.size()
|
||||
if new_index < 0:
|
||||
new_index = language_codes.size() - 1
|
||||
|
||||
var new_lang = language_codes[new_index]
|
||||
settings_manager.set_setting("language", new_lang)
|
||||
|
||||
if localization_manager:
|
||||
localization_manager.change_language(new_lang)
|
||||
else:
|
||||
LocalizationManager.change_language(new_lang)
|
||||
|
||||
_update_language_display()
|
||||
language_changed.emit(new_lang)
|
||||
DebugManager.log_info("Language changed to: " + new_lang, "LanguageSelector")
|
||||
|
||||
func set_highlighted(highlighted: bool):
|
||||
is_highlighted = highlighted
|
||||
if highlighted:
|
||||
scale = original_scale * 1.05
|
||||
modulate = Color(1.1, 1.1, 0.9)
|
||||
else:
|
||||
scale = original_scale
|
||||
modulate = original_modulate
|
||||
|
||||
func handle_input_action(action: String) -> bool:
|
||||
match action:
|
||||
"move_left":
|
||||
change_language(-1)
|
||||
return true
|
||||
"move_right":
|
||||
change_language(1)
|
||||
return true
|
||||
_:
|
||||
return false
|
||||
|
||||
func _on_left_button_pressed():
|
||||
AudioManager.play_ui_click()
|
||||
DebugManager.log_info("Language left button clicked", "LanguageSelector")
|
||||
change_language(-1)
|
||||
|
||||
func _on_right_button_pressed():
|
||||
AudioManager.play_ui_click()
|
||||
DebugManager.log_info("Language right button clicked", "LanguageSelector")
|
||||
change_language(1)
|
||||
|
||||
# For navigation system integration
|
||||
func get_control_name() -> String:
|
||||
return "language_selector"
|
||||
Reference in New Issue
Block a user