Add localization support for achievements: implement language-specific titles and update UI components
This commit is contained in:
@@ -22,6 +22,14 @@ func node(parent: Node, child: Node, label: String) -> Node:
|
|||||||
return child
|
return child
|
||||||
func run() -> void:
|
func run() -> void:
|
||||||
check(load("res://stage/stage.gd") != null, "Stage integration compiles")
|
check(load("res://stage/stage.gd") != null, "Stage integration compiles")
|
||||||
|
var scene: PackedScene = load("res://world/world.tscn")
|
||||||
|
var scene_state: SceneState = scene.get_state()
|
||||||
|
for language in ["English", "Russian"]:
|
||||||
|
var connected := false
|
||||||
|
for i in scene_state.get_connection_count():
|
||||||
|
if str(scene_state.get_connection_source(i)) == "Stage/MainMenu/Language/" + language:
|
||||||
|
connected = scene_state.get_connection_signal(i) == &"pressed" and str(scene_state.get_connection_target(i)) == "Stage/MainMenu" and scene_state.get_connection_method(i) == &"_on_change_locale_pressed" and scene_state.get_connection_binds(i) == ["en" if language == "English" else "ru"]
|
||||||
|
check(connected, language + " button connects to locale handler")
|
||||||
var stage := MockStage.new()
|
var stage := MockStage.new()
|
||||||
root.add_child(stage)
|
root.add_child(stage)
|
||||||
var world = node(stage, Control.new(), "World")
|
var world = node(stage, Control.new(), "World")
|
||||||
@@ -31,6 +39,7 @@ func run() -> void:
|
|||||||
for names in [["ForcePage", "ForceHeader"], ["ResourcePage", "ResourceHeader"], ["StarPage", "StarHeader"], ["StructurePage", "StructureHeader"], ["LifePage", "LifeHeader"]]:
|
for names in [["ForcePage", "ForceHeader"], ["ResourcePage", "ResourceHeader"], ["StarPage", "StarHeader"], ["StructurePage", "StructureHeader"], ["LifePage", "LifeHeader"]]:
|
||||||
node(node(pages, VBoxContainer.new(), names[0]), HBoxContainer.new(), names[1])
|
node(node(pages, VBoxContainer.new(), names[0]), HBoxContainer.new(), names[1])
|
||||||
var screen = node(stage, Control.new(), "Achievements")
|
var screen = node(stage, Control.new(), "Achievements")
|
||||||
|
var title = node(node(screen, Control.new(), "Header"), TextureRect.new(), "Title")
|
||||||
node(node(screen, ScrollContainer.new(), "AchievementList"), VBoxContainer.new(), "AchievementItems")
|
node(node(screen, ScrollContainer.new(), "AchievementList"), VBoxContainer.new(), "AchievementItems")
|
||||||
var controller = Controller.new()
|
var controller = Controller.new()
|
||||||
controller.progress_path = "/tmp/owniverse-achievements-test-%s.cfg" % OS.get_process_id()
|
controller.progress_path = "/tmp/owniverse-achievements-test-%s.cfg" % OS.get_process_id()
|
||||||
@@ -99,6 +108,19 @@ func run() -> void:
|
|||||||
global.Locale = "ru"
|
global.Locale = "ru"
|
||||||
controller.update(0.0)
|
controller.update(0.0)
|
||||||
check(controller.status.text.begins_with("Открыто"), "Status localizes")
|
check(controller.status.text.begins_with("Открыто"), "Status localizes")
|
||||||
|
check(title.texture == Controller.TITLES.ru, "Russian title selected")
|
||||||
|
check(controller.items.a71.event_label.text.contains("90 квадриллионов"), "Russian achievement text selected")
|
||||||
|
global.Locale = "en"
|
||||||
|
controller.update(0.0)
|
||||||
|
check(controller.status.text.begins_with("Unlocked"), "English status selected")
|
||||||
|
check(title.texture == Controller.TITLES.en, "English title selected")
|
||||||
|
check(controller.items.a71.event_label.text.contains("90 quadrillion"), "English achievement text selected")
|
||||||
|
controller.current = {"id": "a71", "type": "c"}
|
||||||
|
controller._display_event(controller.current)
|
||||||
|
check(controller.notification_item.event_label.text.contains("90 quadrillion"), "English notification text selected")
|
||||||
|
global.Locale = "ru"
|
||||||
|
controller.update(0.0)
|
||||||
|
check(controller.notification_item.event_label.text.contains("90 квадриллионов"), "Active notification changes language")
|
||||||
global.Locale = previous_locale
|
global.Locale = previous_locale
|
||||||
var path: String = controller.progress_path
|
var path: String = controller.progress_path
|
||||||
stage.free()
|
stage.free()
|
||||||
|
|||||||
@@ -2,6 +2,10 @@ extends Node
|
|||||||
## Player-wide achievement progress and the shared in-game notification queue.
|
## Player-wide achievement progress and the shared in-game notification queue.
|
||||||
const E = preload("res://world/owniverse/math/exact.gd")
|
const E = preload("res://world/owniverse/math/exact.gd")
|
||||||
const ITEM = preload("res://ui/achievements/achievement_item.tscn")
|
const ITEM = preload("res://ui/achievements/achievement_item.tscn")
|
||||||
|
const TITLES = {
|
||||||
|
"en": preload("res://ui/achievements/achievements.en.png"),
|
||||||
|
"ru": preload("res://ui/achievements/achievements.ru.png"),
|
||||||
|
}
|
||||||
var progress_path: String = "user://achievements.cfg"
|
var progress_path: String = "user://achievements.cfg"
|
||||||
const HOLD_SECONDS = 3.0
|
const HOLD_SECONDS = 3.0
|
||||||
const FADE_SECONDS = 0.3
|
const FADE_SECONDS = 0.3
|
||||||
@@ -158,6 +162,8 @@ func _display_event(event: Dictionary) -> void:
|
|||||||
panel.show()
|
panel.show()
|
||||||
|
|
||||||
func _rebuild_list() -> void:
|
func _rebuild_list() -> void:
|
||||||
|
var title: TextureRect = stage.get_node_or_null("Achievements/Header/Title")
|
||||||
|
if title != null: title.texture = TITLES[locale]
|
||||||
var unlocked := 0
|
var unlocked := 0
|
||||||
var position := 1
|
var position := 1
|
||||||
for id in definitions:
|
for id in definitions:
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
[ext_resource type="Texture2D" uid="uid://bmp7e6lmtaex0" path="res://ui/achievements/icons/10g.png" id="9_3xyrb"]
|
[ext_resource type="Texture2D" uid="uid://bmp7e6lmtaex0" path="res://ui/achievements/icons/10g.png" id="9_3xyrb"]
|
||||||
|
|
||||||
[node name="AchievementItem" type="Control" unique_id=1273881744]
|
[node name="AchievementItem" type="Control" unique_id=1273881744]
|
||||||
custom_minimum_size = Vector2(0, 128)
|
custom_minimum_size = Vector2(1080, 128)
|
||||||
layout_mode = 3
|
layout_mode = 3
|
||||||
anchors_preset = 0
|
anchors_preset = 0
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
@@ -19,9 +19,9 @@ script = ExtResource("1_w8f20")
|
|||||||
|
|
||||||
[node name="Row" type="HBoxContainer" parent="." unique_id=2025386077]
|
[node name="Row" type="HBoxContainer" parent="." unique_id=2025386077]
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
anchors_preset = 15
|
|
||||||
anchor_right = 1.0
|
anchor_right = 1.0
|
||||||
anchor_bottom = 1.0
|
anchor_bottom = 1.0
|
||||||
|
theme_override_constants/separation = 16
|
||||||
|
|
||||||
[node name="Icon1c" type="TextureRect" parent="Row" unique_id=2146478339]
|
[node name="Icon1c" type="TextureRect" parent="Row" unique_id=2146478339]
|
||||||
visible = false
|
visible = false
|
||||||
@@ -74,8 +74,10 @@ texture = ExtResource("9_3xyrb")
|
|||||||
[node name="Label" type="RichTextLabel" parent="Row" unique_id=230945261]
|
[node name="Label" type="RichTextLabel" parent="Row" unique_id=230945261]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
bbcode_enabled = true
|
|
||||||
fit_content = true
|
|
||||||
scroll_active = false
|
|
||||||
theme_override_font_sizes/normal_font_size = 30
|
theme_override_font_sizes/normal_font_size = 30
|
||||||
theme_override_font_sizes/bold_font_size = 30
|
theme_override_font_sizes/bold_font_size = 30
|
||||||
|
bbcode_enabled = true
|
||||||
|
text = "123"
|
||||||
|
fit_content = true
|
||||||
|
scroll_active = false
|
||||||
|
vertical_alignment = 1
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
+3
-22
@@ -255,10 +255,6 @@ texture = ExtResource("13_dp8ul")
|
|||||||
custom_minimum_size = Vector2(316, 64)
|
custom_minimum_size = Vector2(316, 64)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
|
|
||||||
[node name="ForceAchievementItem" parent="Stage/World/PageScroller/HBoxContainer/ForcePage" unique_id=1273881744 instance=ExtResource("64_0drd1")]
|
|
||||||
visible = false
|
|
||||||
layout_mode = 2
|
|
||||||
|
|
||||||
[node name="PageHeaderBorder" parent="Stage/World/PageScroller/HBoxContainer/ForcePage" unique_id=1411786120 instance=ExtResource("12_58wjt")]
|
[node name="PageHeaderBorder" parent="Stage/World/PageScroller/HBoxContainer/ForcePage" unique_id=1411786120 instance=ExtResource("12_58wjt")]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
|
|
||||||
@@ -402,10 +398,6 @@ grow_horizontal = 2
|
|||||||
grow_vertical = 2
|
grow_vertical = 2
|
||||||
texture = ExtResource("23_bcq5b")
|
texture = ExtResource("23_bcq5b")
|
||||||
|
|
||||||
[node name="ResourceAchievementItem" parent="Stage/World/PageScroller/HBoxContainer/ResourcePage" unique_id=746617076 instance=ExtResource("64_0drd1")]
|
|
||||||
visible = false
|
|
||||||
layout_mode = 2
|
|
||||||
|
|
||||||
[node name="ResourceHeaderBorder" parent="Stage/World/PageScroller/HBoxContainer/ResourcePage" unique_id=2672876 instance=ExtResource("12_58wjt")]
|
[node name="ResourceHeaderBorder" parent="Stage/World/PageScroller/HBoxContainer/ResourcePage" unique_id=2672876 instance=ExtResource("12_58wjt")]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
|
|
||||||
@@ -534,10 +526,6 @@ grow_horizontal = 2
|
|||||||
grow_vertical = 2
|
grow_vertical = 2
|
||||||
texture = ExtResource("28_upe80")
|
texture = ExtResource("28_upe80")
|
||||||
|
|
||||||
[node name="StarAchievementItem" parent="Stage/World/PageScroller/HBoxContainer/StarPage" unique_id=1287836220 instance=ExtResource("64_0drd1")]
|
|
||||||
visible = false
|
|
||||||
layout_mode = 2
|
|
||||||
|
|
||||||
[node name="StarHeaderBorder" parent="Stage/World/PageScroller/HBoxContainer/StarPage" unique_id=2057421818 instance=ExtResource("12_58wjt")]
|
[node name="StarHeaderBorder" parent="Stage/World/PageScroller/HBoxContainer/StarPage" unique_id=2057421818 instance=ExtResource("12_58wjt")]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
|
|
||||||
@@ -679,10 +667,6 @@ grow_horizontal = 2
|
|||||||
grow_vertical = 2
|
grow_vertical = 2
|
||||||
texture = ExtResource("23_bcq5b")
|
texture = ExtResource("23_bcq5b")
|
||||||
|
|
||||||
[node name="StructureAchievementItem" parent="Stage/World/PageScroller/HBoxContainer/StructurePage" unique_id=1834701519 instance=ExtResource("64_0drd1")]
|
|
||||||
visible = false
|
|
||||||
layout_mode = 2
|
|
||||||
|
|
||||||
[node name="StructureHeaderBorder" parent="Stage/World/PageScroller/HBoxContainer/StructurePage" unique_id=522613609 instance=ExtResource("12_58wjt")]
|
[node name="StructureHeaderBorder" parent="Stage/World/PageScroller/HBoxContainer/StructurePage" unique_id=522613609 instance=ExtResource("12_58wjt")]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
|
|
||||||
@@ -831,10 +815,6 @@ texture = ExtResource("40_50rdj")
|
|||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
texture = ExtResource("41_mi6gc")
|
texture = ExtResource("41_mi6gc")
|
||||||
|
|
||||||
[node name="LifeAchievementItem" parent="Stage/World/PageScroller/HBoxContainer/LifePage" unique_id=1647265705 instance=ExtResource("64_0drd1")]
|
|
||||||
visible = false
|
|
||||||
layout_mode = 2
|
|
||||||
|
|
||||||
[node name="LifeHeaderBorder" parent="Stage/World/PageScroller/HBoxContainer/LifePage" unique_id=100084430 instance=ExtResource("12_58wjt")]
|
[node name="LifeHeaderBorder" parent="Stage/World/PageScroller/HBoxContainer/LifePage" unique_id=100084430 instance=ExtResource("12_58wjt")]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
|
|
||||||
@@ -1076,11 +1056,10 @@ texture_normal = ExtResource("44_uvuuk")
|
|||||||
texture_pressed = ExtResource("45_an6vj")
|
texture_pressed = ExtResource("45_an6vj")
|
||||||
|
|
||||||
[node name="Header" type="CenterContainer" parent="Stage/Achievements" unique_id=51521239]
|
[node name="Header" type="CenterContainer" parent="Stage/Achievements" unique_id=51521239]
|
||||||
custom_minimum_size = Vector2(1080, 256)
|
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
|
|
||||||
[node name="Title" type="TextureRect" parent="Stage/Achievements/Header" unique_id=1195638572]
|
[node name="Title" type="TextureRect" parent="Stage/Achievements/Header" unique_id=1195638572]
|
||||||
custom_minimum_size = Vector2(824, 256)
|
custom_minimum_size = Vector2(824, 128)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 4
|
size_flags_horizontal = 4
|
||||||
size_flags_vertical = 4
|
size_flags_vertical = 4
|
||||||
@@ -1177,6 +1156,8 @@ script = ExtResource("67_music")
|
|||||||
[connection signal="pressed" from="Stage/MainMenu/TopMenu/BackButton" to="Stage" method="_on_topmenu_button_pressed" binds= ["World"]]
|
[connection signal="pressed" from="Stage/MainMenu/TopMenu/BackButton" to="Stage" method="_on_topmenu_button_pressed" binds= ["World"]]
|
||||||
[connection signal="pressed" from="Stage/MainMenu/CreateOwniverse" to="Stage" method="create_new_universe"]
|
[connection signal="pressed" from="Stage/MainMenu/CreateOwniverse" to="Stage" method="create_new_universe"]
|
||||||
[connection signal="pressed" from="Stage/MainMenu/Achievements" to="Stage" method="_on_topmenu_button_pressed" binds= ["Achievements"]]
|
[connection signal="pressed" from="Stage/MainMenu/Achievements" to="Stage" method="_on_topmenu_button_pressed" binds= ["Achievements"]]
|
||||||
|
[connection signal="pressed" from="Stage/MainMenu/Language/English" to="Stage/MainMenu" method="_on_change_locale_pressed" binds= ["en"]]
|
||||||
|
[connection signal="pressed" from="Stage/MainMenu/Language/Russian" to="Stage/MainMenu" method="_on_change_locale_pressed" binds= ["ru"]]
|
||||||
[connection signal="pressed" from="Stage/MainMenu/Media/Sound" to="Stage/MainMenu" method="_on_sound_pressed"]
|
[connection signal="pressed" from="Stage/MainMenu/Media/Sound" to="Stage/MainMenu" method="_on_sound_pressed"]
|
||||||
[connection signal="pressed" from="Stage/MainMenu/Media/Music" to="Stage/MainMenu" method="_on_music_pressed"]
|
[connection signal="pressed" from="Stage/MainMenu/Media/Music" to="Stage/MainMenu" method="_on_music_pressed"]
|
||||||
[connection signal="value_changed" from="Stage/MainMenu/Volume/SoundVolume" to="Stage/MainMenu" method="_on_sound_volume_value_changed"]
|
[connection signal="value_changed" from="Stage/MainMenu/Volume/SoundVolume" to="Stage/MainMenu" method="_on_sound_volume_value_changed"]
|
||||||
|
|||||||
Reference in New Issue
Block a user