rm old component
This commit is contained in:
@@ -1,25 +0,0 @@
|
|||||||
# Example of how to use the LanguageSelector component in any scene
|
|
||||||
extends Control
|
|
||||||
|
|
||||||
@onready var language_selector: LanguageSelector = $LanguageSelector
|
|
||||||
|
|
||||||
func _ready():
|
|
||||||
DebugManager.log_info("LanguageSelector example ready", "Example")
|
|
||||||
|
|
||||||
# Connect to language change events
|
|
||||||
if language_selector.language_changed.is_connected(_on_language_changed):
|
|
||||||
language_selector.language_changed.disconnect(_on_language_changed)
|
|
||||||
language_selector.language_changed.connect(_on_language_changed)
|
|
||||||
|
|
||||||
func _on_language_changed(new_language: String):
|
|
||||||
DebugManager.log_info("Language changed to: " + new_language, "Example")
|
|
||||||
# Handle language change in your scene
|
|
||||||
# For example: update UI text, save preferences, etc.
|
|
||||||
|
|
||||||
# Example of integrating with a navigation system
|
|
||||||
func handle_input_on_language_selector(action: String) -> bool:
|
|
||||||
return language_selector.handle_input_action(action)
|
|
||||||
|
|
||||||
# Example of highlighting the selector when selected
|
|
||||||
func set_language_selector_highlighted(highlighted: bool):
|
|
||||||
language_selector.set_highlighted(highlighted)
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
uid://beg6mqo6s7huf
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
[gd_scene load_steps=3 format=3 uid="uid://bm3x8y4h9l2kv"]
|
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://examples/LanguageSelectorExample.gd" id="1_example"]
|
|
||||||
[ext_resource type="PackedScene" path="res://scenes/ui/components/LanguageSelector.tscn" id="2_language_selector"]
|
|
||||||
|
|
||||||
[node name="LanguageSelectorExample" type="Control"]
|
|
||||||
layout_mode = 3
|
|
||||||
anchors_preset = 15
|
|
||||||
anchor_right = 1.0
|
|
||||||
anchor_bottom = 1.0
|
|
||||||
grow_horizontal = 2
|
|
||||||
grow_vertical = 2
|
|
||||||
script = ExtResource("1_example")
|
|
||||||
|
|
||||||
[node name="VBoxContainer" type="VBoxContainer" parent="."]
|
|
||||||
layout_mode = 1
|
|
||||||
anchors_preset = 8
|
|
||||||
anchor_left = 0.5
|
|
||||||
anchor_top = 0.5
|
|
||||||
anchor_right = 0.5
|
|
||||||
anchor_bottom = 0.5
|
|
||||||
offset_left = -20.0
|
|
||||||
offset_top = -20.0
|
|
||||||
offset_right = 20.0
|
|
||||||
offset_bottom = 20.0
|
|
||||||
grow_horizontal = 2
|
|
||||||
grow_vertical = 2
|
|
||||||
|
|
||||||
[node name="Title" type="Label" parent="VBoxContainer"]
|
|
||||||
layout_mode = 2
|
|
||||||
text = "Language Selector Component Example"
|
|
||||||
horizontal_alignment = 1
|
|
||||||
|
|
||||||
[node name="HSeparator" type="HSeparator" parent="VBoxContainer"]
|
|
||||||
layout_mode = 2
|
|
||||||
|
|
||||||
[node name="LanguageContainer" type="HBoxContainer" parent="VBoxContainer"]
|
|
||||||
layout_mode = 2
|
|
||||||
|
|
||||||
[node name="LanguageLabel" type="Label" parent="VBoxContainer/LanguageContainer"]
|
|
||||||
custom_minimum_size = Vector2(150, 0)
|
|
||||||
layout_mode = 2
|
|
||||||
text = "Language:"
|
|
||||||
|
|
||||||
[node name="LanguageSelector" parent="VBoxContainer/LanguageContainer" instance=ExtResource("2_language_selector")]
|
|
||||||
layout_mode = 2
|
|
||||||
|
|
||||||
[node name="HSeparator2" type="HSeparator" parent="VBoxContainer"]
|
|
||||||
layout_mode = 2
|
|
||||||
|
|
||||||
[node name="Instructions" type="Label" parent="VBoxContainer"]
|
|
||||||
layout_mode = 2
|
|
||||||
text = "• Click arrow buttons with mouse
|
|
||||||
• Use keyboard/gamepad navigation with left/right
|
|
||||||
• Component is fully reusable in any scene"
|
|
||||||
horizontal_alignment = 1
|
|
||||||
|
|
||||||
[connection signal="language_changed" from="VBoxContainer/LanguageContainer/LanguageSelector" to="." method="_on_language_changed"]
|
|
||||||
@@ -1,118 +0,0 @@
|
|||||||
@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"
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
uid://dh3vt0okvhuid
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
[gd_scene load_steps=2 format=3 uid="uid://bc1h4c5t2m6vx"]
|
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://scenes/ui/components/LanguageSelector.gd" id="1_language_selector"]
|
|
||||||
|
|
||||||
[node name="LanguageSelector" type="HBoxContainer"]
|
|
||||||
layout_mode = 2
|
|
||||||
size_flags_vertical = 4
|
|
||||||
script = ExtResource("1_language_selector")
|
|
||||||
|
|
||||||
[node name="LanguageLeftButton" type="Button" parent="."]
|
|
||||||
layout_mode = 2
|
|
||||||
text = "<"
|
|
||||||
|
|
||||||
[node name="LanguageDisplay" type="Label" parent="."]
|
|
||||||
custom_minimum_size = Vector2(100, 0)
|
|
||||||
layout_mode = 2
|
|
||||||
size_flags_horizontal = 4
|
|
||||||
text = "English"
|
|
||||||
horizontal_alignment = 1
|
|
||||||
|
|
||||||
[node name="LanguageRightButton" type="Button" parent="."]
|
|
||||||
layout_mode = 2
|
|
||||||
text = ">"
|
|
||||||
|
|
||||||
[connection signal="pressed" from="LanguageLeftButton" to="." method="_on_left_button_pressed"]
|
|
||||||
[connection signal="pressed" from="LanguageRightButton" to="." method="_on_right_button_pressed"]
|
|
||||||
Reference in New Issue
Block a user