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 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()

View File

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

View File

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