@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"