Unified settings management and sound fixes

- fix: speech was not paused during pause menu
- fix: allow sound levels to reach min value 0.0 (=muted)
- fix: crash was happening when switch language during the game
This commit is contained in:
Julian Murgia
2022-08-11 22:59:21 +02:00
committed by Duncan Brown
parent 4ef86c6cc3
commit 04348147b9
18 changed files with 286 additions and 95 deletions

View File

@@ -6,6 +6,10 @@ extends Control
signal back_button_pressed
# Custom setting key
const CUSTOM_SETTING: String = "a_custom_setting"
# The current settings
var backup_settings
@@ -39,10 +43,11 @@ func _ready() -> void:
_flags_container.add_child(_lang)
_lang.connect("gui_input", self, "_on_language_input", [lang])
# Show the options
func show():
backup_settings = escoria.settings.duplicate()
initialize_options(escoria.settings)
backup_settings = escoria.settings_manager.get_settings()
initialize_options(backup_settings)
visible = true
@@ -66,7 +71,10 @@ func initialize_options(p_settings):
func _on_language_input(event: InputEvent, language: String):
if event.is_pressed():
TranslationServer.set_locale(language)
escoria.settings["text_lang"] = language
ESCProjectSettingsManager.set_setting(
ESCProjectSettingsManager.TEXT_LANG,
language
)
settings_changed = true
@@ -75,9 +83,15 @@ func _on_language_input(event: InputEvent, language: String):
# #### Parameters
# - value: The new volume level
func _on_sound_volume_changed(value):
escoria.settings["sfx_volume"] = value
escoria.apply_settings(escoria.settings)
settings_changed = true
if ESCProjectSettingsManager.get_setting(
ESCProjectSettingsManager.SFX_VOLUME
) != value:
ESCProjectSettingsManager.set_setting(
ESCProjectSettingsManager.SFX_VOLUME,
value
)
escoria.settings_manager.apply_settings()
settings_changed = true
# Music volume was changed
@@ -85,9 +99,15 @@ func _on_sound_volume_changed(value):
# #### Parameters
# - value: The new volume level
func _on_music_volume_changed(value):
escoria.settings["music_volume"] = value
escoria.apply_settings(escoria.settings)
settings_changed = true
if ESCProjectSettingsManager.get_setting(
ESCProjectSettingsManager.MUSIC_VOLUME
) != value:
ESCProjectSettingsManager.set_setting(
ESCProjectSettingsManager.MUSIC_VOLUME,
value
)
escoria.settings_manager.apply_settings()
settings_changed = true
# General volume was changed
@@ -95,9 +115,15 @@ func _on_music_volume_changed(value):
# #### Parameters
# - value: The new volume level
func _on_general_volume_changed(value):
escoria.settings["master_volume"] = value
escoria.apply_settings(escoria.settings)
settings_changed = true
if ESCProjectSettingsManager.get_setting(
ESCProjectSettingsManager.MASTER_VOLUME
) != value:
ESCProjectSettingsManager.set_setting(
ESCProjectSettingsManager.MASTER_VOLUME,
value
)
escoria.settings_manager.apply_settings()
settings_changed = true
# Speech volume was changed
@@ -105,21 +131,27 @@ func _on_general_volume_changed(value):
# #### Parameters
# - value: The new volume level
func _on_speech_volume_value_changed(value: float) -> void:
escoria.settings["speech_volume"] = value
escoria.apply_settings(escoria.settings)
settings_changed = true
if ESCProjectSettingsManager.get_setting(
ESCProjectSettingsManager.SPEECH_VOLUME
) != value:
ESCProjectSettingsManager.set_setting(
ESCProjectSettingsManager.SPEECH_VOLUME,
value
)
escoria.settings_manager.apply_settings()
settings_changed = true
# Save the settings
func _on_apply_pressed():
escoria.settings.custom_settings["a_custom_setting"] = 100
escoria.save_manager.save_settings()
escoria.settings_manager.custom_settings[CUSTOM_SETTING] = 100
escoria.settings_manager.save_settings()
settings_changed = false
emit_signal("back_button_pressed")
# The back button was pressed
func _on_back_pressed():
escoria.settings = backup_settings
escoria.apply_settings(escoria.settings)
escoria.settings_manager.save_settings_resource_to_project_settings(backup_settings)
escoria.settings_manager.apply_settings()
emit_signal("back_button_pressed")

View File

@@ -7,9 +7,6 @@
anchor_right = 1.0
anchor_bottom = 1.0
script = ExtResource( 4 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="Panel" type="Panel" parent="."]
anchor_right = 1.0
@@ -86,10 +83,8 @@ margin_top = 79.0
margin_right = 457.0
margin_bottom = 95.0
size_flags_horizontal = 3
min_value = 0.001
max_value = 1.0
step = 0.001
value = 0.001
[node name="label3" type="Label" parent="VBoxContainer/MarginContainer/options"]
margin_top = 100.0
@@ -103,10 +98,8 @@ margin_top = 99.0
margin_right = 457.0
margin_bottom = 115.0
size_flags_horizontal = 3
min_value = 0.001
max_value = 1.0
step = 0.001
value = 0.001
[node name="label4" type="Label" parent="VBoxContainer/MarginContainer/options"]
margin_top = 120.0
@@ -120,10 +113,8 @@ margin_top = 119.0
margin_right = 457.0
margin_bottom = 135.0
size_flags_horizontal = 3
min_value = 0.001
max_value = 1.0
step = 0.001
value = 0.001
[node name="label5" type="Label" parent="VBoxContainer/MarginContainer/options"]
margin_top = 140.0
@@ -137,10 +128,8 @@ margin_top = 139.0
margin_right = 457.0
margin_bottom = 155.0
size_flags_horizontal = 3
min_value = 0.001
max_value = 1.0
step = 0.001
value = 0.001
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
margin_top = 539.0