diff --git a/addons/escoria-ui-return-monkey-island/game.gd b/addons/escoria-ui-return-monkey-island/game.gd index fb9fe155..b55690f6 100644 --- a/addons/escoria-ui-return-monkey-island/game.gd +++ b/addons/escoria-ui-return-monkey-island/game.gd @@ -414,11 +414,11 @@ func pause_game(): escoria.set_game_paused(true) func apply_custom_settings(custom_settings: Dictionary): - if custom_settings.has("a_custom_setting"): + if custom_settings.has("speech_speed"): escoria.logger.info( self, "custom setting value loaded: %s." - % str(custom_settings["a_custom_setting"]) + % str(custom_settings["speech_speed"]) ) diff --git a/addons/escoria-ui-return-monkey-island/menus/main_menu/main_menu.tscn b/addons/escoria-ui-return-monkey-island/menus/main_menu/main_menu.tscn index 89dd9961..feee7dce 100644 --- a/addons/escoria-ui-return-monkey-island/menus/main_menu/main_menu.tscn +++ b/addons/escoria-ui-return-monkey-island/menus/main_menu/main_menu.tscn @@ -3,7 +3,7 @@ [ext_resource path="res://addons/escoria-ui-return-monkey-island/menus/main_menu/main_menu.gd" type="Script" id=1] [ext_resource path="res://addons/escoria-ui-return-monkey-island/menus/savegame_feature_button.gd" type="Script" id=2] [ext_resource path="res://gymkhana/logo-small.png" type="Texture" id=3] -[ext_resource path="res://addons/escoria-core/ui_library/menus/options/options.tscn" type="PackedScene" id=4] +[ext_resource path="res://addons/escoria-ui-return-monkey-island/menus/options/options.tscn" type="PackedScene" id=4] [ext_resource path="res://addons/escoria-core/ui_library/menus/load_save/load/load_game.tscn" type="PackedScene" id=5] [node name="main_menu" type="Control"] diff --git a/addons/escoria-ui-return-monkey-island/menus/options/flags/de.png b/addons/escoria-ui-return-monkey-island/menus/options/flags/de.png new file mode 100644 index 00000000..4fe98a89 Binary files /dev/null and b/addons/escoria-ui-return-monkey-island/menus/options/flags/de.png differ diff --git a/addons/escoria-ui-return-monkey-island/menus/options/flags/en.png b/addons/escoria-ui-return-monkey-island/menus/options/flags/en.png new file mode 100644 index 00000000..05892848 Binary files /dev/null and b/addons/escoria-ui-return-monkey-island/menus/options/flags/en.png differ diff --git a/addons/escoria-ui-return-monkey-island/menus/options/flags/es.png b/addons/escoria-ui-return-monkey-island/menus/options/flags/es.png new file mode 100644 index 00000000..7178ce42 Binary files /dev/null and b/addons/escoria-ui-return-monkey-island/menus/options/flags/es.png differ diff --git a/addons/escoria-ui-return-monkey-island/menus/options/flags/fr.png b/addons/escoria-ui-return-monkey-island/menus/options/flags/fr.png new file mode 100644 index 00000000..fcaf2cc1 Binary files /dev/null and b/addons/escoria-ui-return-monkey-island/menus/options/flags/fr.png differ diff --git a/addons/escoria-ui-return-monkey-island/menus/options/options.gd b/addons/escoria-ui-return-monkey-island/menus/options/options.gd new file mode 100644 index 00000000..556dacd2 --- /dev/null +++ b/addons/escoria-ui-return-monkey-island/menus/options/options.gd @@ -0,0 +1,190 @@ +# An options menu +extends Control + + +# The back button was pressed +signal back_button_pressed + + +# Custom setting key +const SPEECH_SPEED_SETTING: String = "speech_speed" + + +# The current settings +var backup_settings + + +# A list of languages already added to the language selection +var _loaded_languages: Array = [] + + +# The settings changed +onready var settings_changed = false + + +# Initialize the flags +func _ready() -> void: + var _flags_container: HBoxContainer = \ + $VBoxContainer/MarginContainer/options/flags + for child in _flags_container.get_children(): + _flags_container.remove_child(child) + child.queue_free() + + _loaded_languages = [] + + for lang in TranslationServer.get_loaded_locales(): + if not lang in _loaded_languages: + _loaded_languages.append(lang) + var _lang = TextureRect.new() + _lang.texture = load( + "res://addons/escoria-core/ui_library" + \ + "/menus/options/flags/%s.png" % lang + ) + _flags_container.add_child(_lang) + _lang.connect("gui_input", self, "_on_language_input", [lang]) + + +# Show the options +func show(): + backup_settings = escoria.settings_manager.get_settings() + initialize_options(backup_settings) + visible = true + + +# Set the sliders to the values of the settings +# +# #### Parameters +# - p_settings: The settings to use +func initialize_options(p_settings): + var _options = $VBoxContainer/MarginContainer/options + _options.get_node("general_volume").value = p_settings["master_volume"] + _options.get_node("sound_volume").value = p_settings["sfx_volume"] + _options.get_node("music_volume").value = p_settings["music_volume"] + _options.get_node("speech_volume").value = p_settings["speech_volume"] + _options.get_node("speech_speed").value = p_settings["custom_settings"][SPEECH_SPEED_SETTING] + + _options.get_node("fullscreen").set_pressed_no_signal(p_settings["fullscreen"]) + + +# The language was changed +# +# #### Parameters +# - event: The input event from the flag +# - language: The language to set +func _on_language_input(event: InputEvent, language: String): + if event.is_pressed(): + TranslationServer.set_locale(language) + ESCProjectSettingsManager.set_setting( + ESCProjectSettingsManager.TEXT_LANG, + language + ) + settings_changed = true + + +# Sound volume was changed +# +# #### Parameters +# - value: The new volume level +func _on_sound_volume_changed(value): + 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 +# +# #### Parameters +# - value: The new volume level +func _on_music_volume_changed(value): + 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 +# +# #### Parameters +# - value: The new volume level +func _on_general_volume_changed(value): + 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 +# +# #### Parameters +# - value: The new volume level +func _on_speech_volume_value_changed(value: float) -> void: + if ESCProjectSettingsManager.get_setting( + ESCProjectSettingsManager.SPEECH_VOLUME + ) != value: + ESCProjectSettingsManager.set_setting( + ESCProjectSettingsManager.SPEECH_VOLUME, + value + ) + escoria.settings_manager.apply_settings() + settings_changed = true + + +# Fullscreen was changed +# +# #### Parameters +# - button_pressed: Fullscreen (true) or windowed (false) +func _on_fullscreen_toggled(button_pressed: bool) -> void: + if ESCProjectSettingsManager.get_setting( + ESCProjectSettingsManager.FULLSCREEN + ) != button_pressed: + ESCProjectSettingsManager.set_setting( + ESCProjectSettingsManager.FULLSCREEN, + button_pressed + ) + escoria.settings_manager.apply_settings() + settings_changed = true + + +# Save the settings +func _on_apply_pressed(): + escoria.settings_manager.custom_settings[SPEECH_SPEED_SETTING] = ESCProjectSettingsManager.get_setting( + RTMISimpleDialogSettings.READING_SPEED_IN_WPM + ) + escoria.settings_manager.save_settings() + settings_changed = false + emit_signal("back_button_pressed") + + +# The back button was pressed +func _on_back_pressed(): + escoria.settings_manager.save_settings_resource_to_project_settings(backup_settings) + escoria.settings_manager.apply_settings() + emit_signal("back_button_pressed") + + +func _on_speech_speed_value_changed(value): + if ProjectSettings.get_setting( + RTMISimpleDialogSettings.READING_SPEED_IN_WPM + ) != value: + ProjectSettings.set_setting( + RTMISimpleDialogSettings.READING_SPEED_IN_WPM, + value + ) + escoria.settings_manager.apply_settings() + settings_changed = true diff --git a/addons/escoria-ui-return-monkey-island/menus/options/options.tscn b/addons/escoria-ui-return-monkey-island/menus/options/options.tscn new file mode 100644 index 00000000..f412ce14 --- /dev/null +++ b/addons/escoria-ui-return-monkey-island/menus/options/options.tscn @@ -0,0 +1,192 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://addons/escoria-ui-return-monkey-island/menus/options/flags/de.png" type="Texture" id=1] +[ext_resource path="res://addons/escoria-ui-return-monkey-island/menus/options/options.gd" type="Script" id=4] + +[node name="options" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +script = ExtResource( 4 ) + +[node name="Panel" type="Panel" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +__meta__ = { +"_editor_description_": "" +} + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +alignment = 1 + +[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer"] +margin_left = 391.0 +margin_top = 241.0 +margin_right = 888.0 +margin_bottom = 484.0 +size_flags_horizontal = 6 +custom_constants/margin_right = 20 +custom_constants/margin_top = 20 +custom_constants/margin_left = 20 +custom_constants/margin_bottom = 20 + +[node name="options" type="GridContainer" parent="VBoxContainer/MarginContainer"] +margin_left = 20.0 +margin_top = 20.0 +margin_right = 477.0 +margin_bottom = 223.0 +size_flags_vertical = 6 +custom_constants/hseparation = 40 +columns = 2 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="label" type="Label" parent="VBoxContainer/MarginContainer/options"] +margin_top = 30.0 +margin_right = 137.0 +margin_bottom = 44.0 +text = "OPTIONS_LANGUAGE" + +[node name="flags" type="HBoxContainer" parent="VBoxContainer/MarginContainer/options"] +margin_left = 177.0 +margin_right = 457.0 +margin_bottom = 75.0 +size_flags_vertical = 3 +custom_constants/separation = 30 +alignment = 1 + +[node name="TextureRect2" type="TextureRect" parent="VBoxContainer/MarginContainer/options/flags"] +margin_right = 125.0 +margin_bottom = 75.0 +texture = ExtResource( 1 ) + +[node name="TextureRect3" type="TextureRect" parent="VBoxContainer/MarginContainer/options/flags"] +margin_left = 155.0 +margin_right = 280.0 +margin_bottom = 75.0 +texture = ExtResource( 1 ) + +[node name="label2" type="Label" parent="VBoxContainer/MarginContainer/options"] +margin_top = 80.0 +margin_right = 137.0 +margin_bottom = 94.0 +text = "GENERAL_VOLUME" + +[node name="general_volume" type="HSlider" parent="VBoxContainer/MarginContainer/options"] +margin_left = 177.0 +margin_top = 79.0 +margin_right = 457.0 +margin_bottom = 95.0 +size_flags_horizontal = 3 +max_value = 1.0 +step = 0.001 + +[node name="label3" type="Label" parent="VBoxContainer/MarginContainer/options"] +margin_top = 100.0 +margin_right = 137.0 +margin_bottom = 114.0 +text = "SOUND_VOLUME" + +[node name="sound_volume" type="HSlider" parent="VBoxContainer/MarginContainer/options"] +margin_left = 177.0 +margin_top = 99.0 +margin_right = 457.0 +margin_bottom = 115.0 +size_flags_horizontal = 3 +max_value = 1.0 +step = 0.001 + +[node name="label4" type="Label" parent="VBoxContainer/MarginContainer/options"] +margin_top = 120.0 +margin_right = 137.0 +margin_bottom = 134.0 +text = "MUSIC_VOLUME" + +[node name="music_volume" type="HSlider" parent="VBoxContainer/MarginContainer/options"] +margin_left = 177.0 +margin_top = 119.0 +margin_right = 457.0 +margin_bottom = 135.0 +size_flags_horizontal = 3 +max_value = 1.0 +step = 0.001 + +[node name="label5" type="Label" parent="VBoxContainer/MarginContainer/options"] +margin_top = 140.0 +margin_right = 137.0 +margin_bottom = 154.0 +text = "SPEECH_VOLUME" + +[node name="speech_volume" type="HSlider" parent="VBoxContainer/MarginContainer/options"] +margin_left = 177.0 +margin_top = 139.0 +margin_right = 457.0 +margin_bottom = 155.0 +size_flags_horizontal = 3 +max_value = 1.0 +step = 0.001 + +[node name="label6" type="Label" parent="VBoxContainer/MarginContainer/options"] +margin_top = 164.0 +margin_right = 137.0 +margin_bottom = 178.0 +text = "FULLSCREEN" + +[node name="fullscreen" type="CheckBox" parent="VBoxContainer/MarginContainer/options"] +margin_left = 177.0 +margin_top = 159.0 +margin_right = 457.0 +margin_bottom = 183.0 + +[node name="label7" type="Label" parent="VBoxContainer/MarginContainer/options"] +margin_top = 188.0 +margin_right = 137.0 +margin_bottom = 202.0 +text = "SPEECH_SPEED" + +[node name="speech_speed" type="HSlider" parent="VBoxContainer/MarginContainer/options"] +margin_left = 177.0 +margin_top = 187.0 +margin_right = 457.0 +margin_bottom = 203.0 +size_flags_horizontal = 3 +min_value = 10.0 +max_value = 400.0 +step = 10.0 +value = 200.0 + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] +margin_top = 488.0 +margin_right = 1280.0 +margin_bottom = 508.0 +custom_constants/separation = 20 +alignment = 1 + +[node name="back" type="Button" parent="VBoxContainer/HBoxContainer"] +margin_left = 549.0 +margin_right = 660.0 +margin_bottom = 20.0 +text = "OPTIONS_BACK" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="apply" type="Button" parent="VBoxContainer/HBoxContainer"] +margin_left = 680.0 +margin_right = 731.0 +margin_bottom = 20.0 +text = "APPLY" +__meta__ = { +"_edit_use_anchors_": false +} + +[connection signal="value_changed" from="VBoxContainer/MarginContainer/options/general_volume" to="." method="_on_general_volume_changed"] +[connection signal="value_changed" from="VBoxContainer/MarginContainer/options/sound_volume" to="." method="_on_sound_volume_changed"] +[connection signal="value_changed" from="VBoxContainer/MarginContainer/options/music_volume" to="." method="_on_music_volume_changed"] +[connection signal="value_changed" from="VBoxContainer/MarginContainer/options/speech_volume" to="." method="_on_speech_volume_value_changed"] +[connection signal="toggled" from="VBoxContainer/MarginContainer/options/fullscreen" to="." method="_on_fullscreen_toggled"] +[connection signal="value_changed" from="VBoxContainer/MarginContainer/options/speech_speed" to="." method="_on_speech_speed_value_changed"] +[connection signal="pressed" from="VBoxContainer/HBoxContainer/back" to="." method="_on_back_pressed"] +[connection signal="pressed" from="VBoxContainer/HBoxContainer/apply" to="." method="_on_apply_pressed"] diff --git a/addons/escoria-ui-return-monkey-island/menus/pause_menu/pause_menu.tscn b/addons/escoria-ui-return-monkey-island/menus/pause_menu/pause_menu.tscn index 62856b3e..ffbe9fcd 100644 --- a/addons/escoria-ui-return-monkey-island/menus/pause_menu/pause_menu.tscn +++ b/addons/escoria-ui-return-monkey-island/menus/pause_menu/pause_menu.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=7 format=2] [ext_resource path="res://addons/escoria-ui-return-monkey-island/menus/pause_menu/pause_menu.gd" type="Script" id=1] -[ext_resource path="res://addons/escoria-core/ui_library/menus/options/options.tscn" type="PackedScene" id=2] +[ext_resource path="res://addons/escoria-ui-return-monkey-island/menus/options/options.tscn" type="PackedScene" id=2] [ext_resource path="res://gymkhana/logo-small.png" type="Texture" id=3] [ext_resource path="res://addons/escoria-core/ui_library/menus/load_save/save/save_game.tscn" type="PackedScene" id=4] [ext_resource path="res://addons/escoria-core/ui_library/menus/load_save/load/load_game.tscn" type="PackedScene" id=5] diff --git a/gymkhana/translations/main_menu.csv b/gymkhana/translations/main_menu.csv index fae9a28a..8cdb8b02 100644 --- a/gymkhana/translations/main_menu.csv +++ b/gymkhana/translations/main_menu.csv @@ -11,6 +11,7 @@ GENERAL_VOLUME,General,Général,Allgemein,General MUSIC_VOLUME,Music,Musique,Musik,Música SOUND_VOLUME,Sound effects,Effets sonores,Soundeffekte,Efectos de sonido SPEECH_VOLUME,Speech,Voix,Sprachausgabe,Voz +SPEECH_SPEED,Speech speed,Vitesse du texte,Textgeschwindigkeit,Velocidad del texto FULLSCREEN,Fullscreen,Plein écran,Vollbild,Pantalla completa CANCEL,Cancel,Annuler,Abbrechen,Cancelar OK,OK,Ok,Ok,Ok