From b8e1e6ff0f3a6c6bffee76cd0e077e911d418a5a Mon Sep 17 00:00:00 2001 From: betalars Date: Fri, 18 Oct 2024 15:42:53 +0200 Subject: [PATCH] Adding language switcher to audio settings --- src/logic-scenes/main menu/audio_settings.gd | 4 ++ .../main menu/audio_settings.tscn | 42 +++++++++++++++---- src/singletons/global_state.gd | 36 ++++++++++++---- 3 files changed, 67 insertions(+), 15 deletions(-) diff --git a/src/logic-scenes/main menu/audio_settings.gd b/src/logic-scenes/main menu/audio_settings.gd index c62d51c..a2f354a 100644 --- a/src/logic-scenes/main menu/audio_settings.gd +++ b/src/logic-scenes/main menu/audio_settings.gd @@ -20,6 +20,8 @@ var current_music_decay:float = 0 @onready var sfx_slider: Range = %SoundSlider @onready var speech_slider: Range = %SpeechSlider @onready var sum_slider: Range = %SumSlider +@onready var text_lang_selector: OptionButton = %InterfaceSelector +@onready var speech_lang_selector: OptionButton = %SpeechSelector func _process(delta: float) -> void: if current_music_decay > 0: @@ -69,6 +71,8 @@ func update_ui_from_state(): sfx_slider.value = State.sfx_volume speech_slider.value = State.speech_volume sum_slider.value = State.main_volume + text_lang_selector.select(State.text_language) + speech_lang_selector.select(State.speech_language) func _on_exit_button_pressed() -> void: leave_stage.emit() diff --git a/src/logic-scenes/main menu/audio_settings.tscn b/src/logic-scenes/main menu/audio_settings.tscn index 950b032..cb0190f 100644 --- a/src/logic-scenes/main menu/audio_settings.tscn +++ b/src/logic-scenes/main menu/audio_settings.tscn @@ -63,14 +63,14 @@ pressed = true [sub_resource type="Shortcut" id="Shortcut_0peu0"] events = [SubResource("InputEventAction_gy6yb")] -[node name="Audio Settings" type="VBoxContainer"] +[node name="Audio and Language" type="VBoxContainer"] script = ExtResource("1_0lla1") metadata/_tab_index = 1 [node name="Label" type="Label" parent="."] layout_mode = 2 theme_type_variation = &"HeaderLarge" -text = "Audio Settings" +text = "Audio and Language" [node name="VBoxContainer" type="VBoxContainer" parent="."] layout_mode = 2 @@ -161,20 +161,48 @@ max_value = 1.0 step = 0.05 value = 0.5 -[node name="Audio Sliders" type="HBoxContainer" parent="VBoxContainer"] +[node name="I18nLabel" type="Label" parent="."] layout_mode = 2 +theme_type_variation = &"HeaderMedium" +text = "Language Settings" -[node name="Labels" type="VBoxContainer" parent="VBoxContainer/Audio Sliders"] +[node name="GridContainer" type="GridContainer" parent="."] layout_mode = 2 +columns = 2 -[node name="Sliders" type="VBoxContainer" parent="VBoxContainer/Audio Sliders"] +[node name="Label2" type="Label" parent="GridContainer"] layout_mode = 2 +text = "Interface" -[node name="Sounds" type="HBoxContainer" parent="VBoxContainer"] +[node name="InterfaceSelector" type="OptionButton" parent="GridContainer"] +unique_name_in_owner = true layout_mode = 2 +selected = 0 +item_count = 3 +popup/item_0/text = "use system language" +popup/item_1/text = "English" +popup/item_1/id = 1 +popup/item_2/text = "German" +popup/item_2/id = 2 -[node name="Speech" type="HBoxContainer" parent="VBoxContainer"] +[node name="Label3" type="Label" parent="GridContainer"] layout_mode = 2 +text = "Voice Lines" + +[node name="SpeechSelector" type="OptionButton" parent="GridContainer"] +unique_name_in_owner = true +layout_mode = 2 +selected = 0 +item_count = 3 +popup/item_0/text = "use system language" +popup/item_1/text = "English" +popup/item_1/id = 1 +popup/item_2/text = "German" +popup/item_2/id = 2 + +[node name="I18nLabel2" type="Label" parent="."] +layout_mode = 2 +text = "Find Subtitle Settings in Acessability Settings." [node name="confirm_buttons" type="HSplitContainer" parent="."] layout_mode = 2 diff --git a/src/singletons/global_state.gd b/src/singletons/global_state.gd index ce07a8f..d74dac1 100644 --- a/src/singletons/global_state.gd +++ b/src/singletons/global_state.gd @@ -6,16 +6,24 @@ extends Node @export_file var user_saves_path:String = "user://savegames" @export_group("Acessability") +@export var reduce_motion: bool = false @export var screen_reader_enabled:bool = false @export var rendering_disabled: bool = false @export var use_simplified_navigation:bool = false @export var show_navigation_buttons: bool = false +@export_enum("handwriting", "serif", "legible", "system") var font_style: int = 0 @export_enum("disabled", "text", "cc") var subtitles: int = false -@export var reduce_motion: bool = false +@export var ui_scaling: float = 1: + set(value): + ui_scaling = value + ProjectSettings.set_setting("gui/theme/default_theme_scale", value) @export var show_content_notes: bool = false @export var provide_summaries: bool = false @export var allow_skipping: bool = false +# FIXME find a better way to switch fonts! +var current_main_theme:Theme = preload("res://logic-scenes/themes/handwriting.theme") + @export_group("AudioSettings") @export var main_volume:float = 1: set(volume): @@ -41,12 +49,23 @@ extends Node set(volume): speech_volume = volume AudioServer.set_bus_volume_db(AudioServer.get_bus_index("text"), linear_to_db(volume)) +@export_enum("system_locale", "english", "german") var text_language: int = -1: + set(value): + text_language = value + match text_language: + 0: TranslationServer.set_locale("en") + 1: TranslationServer.set_locale("de") + _: TranslationServer.set_locale(OS.get_locale()) +@export_enum("system_locale", "english", "german") var speech_language: int = -1: + set(value): + speech_language = value @export_group("Gameplay Settings") @export var input_sensitivity: float @export var inverty_y_axis: bool @export_enum("off", "top_left", "top_right", "bottom_left", "bottom_right") var stream_overlay_position: int +# for passing VFX settings not contained by project settings to scene environemnt var ssil_enable:bool = false: set(value): ssil_enable = value @@ -56,16 +75,12 @@ var sdfgi_enable:bool = false: sdfgi_enable = value environment_settings_changed.emit() -var stage_list:Array = [] -var focus_locked: bool = false +var active_save_game: SaveGame signal environment_settings_changed signal theme_changed -var current_main_theme:Theme = preload("res://logic-scenes/themes/easy-handwriting.theme"): - set(theme): - current_main_theme = theme - emit_signal("theme_changed", theme) + func load_user_settings(): @@ -89,12 +104,14 @@ func load_user_settings(): func save_settings(): var out_dict = { "accessability": { + "reduce_motion:": reduce_motion, "screen_reader_enabled": screen_reader_enabled, "rendering_disabled": rendering_disabled, "use_simplified_navigation": use_simplified_navigation, "show_navigation_buttons": show_navigation_buttons, "subtitles": subtitles, - "reduce_motion:": reduce_motion, + "font_style": font_style, + "ui_scaling": ui_scaling, "show_content_notes:": show_content_notes, "provide_summaries:": provide_summaries, "allow_skipping:": allow_skipping @@ -130,6 +147,9 @@ func _ready(): #region focus handling (called staging to avoid name colisions) +var stage_list:Array = [] +var focus_locked: bool = false + # Intented for use when an actor wants focus for itself, can reclaim focus, thus dropping the stack that focused. func take_stage(actor: Object, reclaim: bool = false) -> bool: if focus_locked: return false