Adding language switcher to audio settings

This commit is contained in:
betalars 2024-10-18 15:42:53 +02:00
parent 41129f0766
commit b8e1e6ff0f
3 changed files with 67 additions and 15 deletions

View File

@ -20,6 +20,8 @@ var current_music_decay:float = 0
@onready var sfx_slider: Range = %SoundSlider @onready var sfx_slider: Range = %SoundSlider
@onready var speech_slider: Range = %SpeechSlider @onready var speech_slider: Range = %SpeechSlider
@onready var sum_slider: Range = %SumSlider @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: func _process(delta: float) -> void:
if current_music_decay > 0: if current_music_decay > 0:
@ -69,6 +71,8 @@ func update_ui_from_state():
sfx_slider.value = State.sfx_volume sfx_slider.value = State.sfx_volume
speech_slider.value = State.speech_volume speech_slider.value = State.speech_volume
sum_slider.value = State.main_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: func _on_exit_button_pressed() -> void:
leave_stage.emit() leave_stage.emit()

View File

@ -63,14 +63,14 @@ pressed = true
[sub_resource type="Shortcut" id="Shortcut_0peu0"] [sub_resource type="Shortcut" id="Shortcut_0peu0"]
events = [SubResource("InputEventAction_gy6yb")] events = [SubResource("InputEventAction_gy6yb")]
[node name="Audio Settings" type="VBoxContainer"] [node name="Audio and Language" type="VBoxContainer"]
script = ExtResource("1_0lla1") script = ExtResource("1_0lla1")
metadata/_tab_index = 1 metadata/_tab_index = 1
[node name="Label" type="Label" parent="."] [node name="Label" type="Label" parent="."]
layout_mode = 2 layout_mode = 2
theme_type_variation = &"HeaderLarge" theme_type_variation = &"HeaderLarge"
text = "Audio Settings" text = "Audio and Language"
[node name="VBoxContainer" type="VBoxContainer" parent="."] [node name="VBoxContainer" type="VBoxContainer" parent="."]
layout_mode = 2 layout_mode = 2
@ -161,20 +161,48 @@ max_value = 1.0
step = 0.05 step = 0.05
value = 0.5 value = 0.5
[node name="Audio Sliders" type="HBoxContainer" parent="VBoxContainer"] [node name="I18nLabel" type="Label" parent="."]
layout_mode = 2 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 layout_mode = 2
columns = 2
[node name="Sliders" type="VBoxContainer" parent="VBoxContainer/Audio Sliders"] [node name="Label2" type="Label" parent="GridContainer"]
layout_mode = 2 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 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 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="."] [node name="confirm_buttons" type="HSplitContainer" parent="."]
layout_mode = 2 layout_mode = 2

View File

@ -6,16 +6,24 @@ extends Node
@export_file var user_saves_path:String = "user://savegames" @export_file var user_saves_path:String = "user://savegames"
@export_group("Acessability") @export_group("Acessability")
@export var reduce_motion: bool = false
@export var screen_reader_enabled:bool = false @export var screen_reader_enabled:bool = false
@export var rendering_disabled: bool = false @export var rendering_disabled: bool = false
@export var use_simplified_navigation:bool = false @export var use_simplified_navigation:bool = false
@export var show_navigation_buttons: 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_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 show_content_notes: bool = false
@export var provide_summaries: bool = false @export var provide_summaries: bool = false
@export var allow_skipping: 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_group("AudioSettings")
@export var main_volume:float = 1: @export var main_volume:float = 1:
set(volume): set(volume):
@ -41,12 +49,23 @@ extends Node
set(volume): set(volume):
speech_volume = volume speech_volume = volume
AudioServer.set_bus_volume_db(AudioServer.get_bus_index("text"), linear_to_db(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_group("Gameplay Settings")
@export var input_sensitivity: float @export var input_sensitivity: float
@export var inverty_y_axis: bool @export var inverty_y_axis: bool
@export_enum("off", "top_left", "top_right", "bottom_left", "bottom_right") var stream_overlay_position: int @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: var ssil_enable:bool = false:
set(value): set(value):
ssil_enable = value ssil_enable = value
@ -56,16 +75,12 @@ var sdfgi_enable:bool = false:
sdfgi_enable = value sdfgi_enable = value
environment_settings_changed.emit() environment_settings_changed.emit()
var stage_list:Array = [] var active_save_game: SaveGame
var focus_locked: bool = false
signal environment_settings_changed signal environment_settings_changed
signal theme_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(): func load_user_settings():
@ -89,12 +104,14 @@ func load_user_settings():
func save_settings(): func save_settings():
var out_dict = { var out_dict = {
"accessability": { "accessability": {
"reduce_motion:": reduce_motion,
"screen_reader_enabled": screen_reader_enabled, "screen_reader_enabled": screen_reader_enabled,
"rendering_disabled": rendering_disabled, "rendering_disabled": rendering_disabled,
"use_simplified_navigation": use_simplified_navigation, "use_simplified_navigation": use_simplified_navigation,
"show_navigation_buttons": show_navigation_buttons, "show_navigation_buttons": show_navigation_buttons,
"subtitles": subtitles, "subtitles": subtitles,
"reduce_motion:": reduce_motion, "font_style": font_style,
"ui_scaling": ui_scaling,
"show_content_notes:": show_content_notes, "show_content_notes:": show_content_notes,
"provide_summaries:": provide_summaries, "provide_summaries:": provide_summaries,
"allow_skipping:": allow_skipping "allow_skipping:": allow_skipping
@ -130,6 +147,9 @@ func _ready():
#region focus handling (called staging to avoid name colisions) #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. # 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: func take_stage(actor: Object, reclaim: bool = false) -> bool:
if focus_locked: return false if focus_locked: return false