Add sound volume management and language selection
Not all translated yet though
This commit is contained in:
@@ -132,8 +132,30 @@ func set_escoria_main_settings():
|
||||
ProjectSettings.add_property_info(force_quit_property_info)
|
||||
|
||||
ProjectSettings.set_setting("application/run/main_scene", "res://addons/escoria-core/game/main_scene.tscn")
|
||||
|
||||
|
||||
|
||||
if !ProjectSettings.has_setting("escoria/main/text_lang"):
|
||||
ProjectSettings.set_setting("escoria/main/text_lang", TranslationServer.get_locale())
|
||||
var text_lang_property_info = {
|
||||
"name": "escoria/main/text_lang",
|
||||
"type": TYPE_STRING,
|
||||
"hint": PROPERTY_HINT_NONE
|
||||
}
|
||||
ProjectSettings.add_property_info(text_lang_property_info)
|
||||
|
||||
if !ProjectSettings.has_setting("escoria/main/voice_lang"):
|
||||
ProjectSettings.set_setting("escoria/main/voice_lang", TranslationServer.get_locale())
|
||||
var voice_lang_property_info = {
|
||||
"name": "escoria/main/voice_lang",
|
||||
"type": TYPE_STRING,
|
||||
"hint": PROPERTY_HINT_NONE
|
||||
}
|
||||
ProjectSettings.add_property_info(voice_lang_property_info)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
func set_escoria_debug_settings():
|
||||
if !ProjectSettings.has_setting("escoria/debug/terminate_on_warnings"):
|
||||
@@ -160,26 +182,46 @@ func set_escoria_internal_settings():
|
||||
|
||||
|
||||
func set_escoria_sound_settings():
|
||||
if !ProjectSettings.has_setting("escoria/sound/master_volume"):
|
||||
ProjectSettings.set_setting("escoria/sound/master_volume", 1)
|
||||
var master_data_property_info = {
|
||||
"name": "escoria/sound/master_volume",
|
||||
"type": TYPE_INT,
|
||||
"hint": PROPERTY_HINT_RANGE,
|
||||
"hint_string": "0,1"
|
||||
}
|
||||
ProjectSettings.add_property_info(master_data_property_info)
|
||||
|
||||
if !ProjectSettings.has_setting("escoria/sound/music_volume"):
|
||||
ProjectSettings.set_setting("escoria/sound/music_volume", 5)
|
||||
ProjectSettings.set_setting("escoria/sound/music_volume", 1)
|
||||
var music_data_property_info = {
|
||||
"name": "escoria/sound/music_volume",
|
||||
"type": TYPE_INT,
|
||||
"hint": PROPERTY_HINT_RANGE,
|
||||
"hint_string": "0,15"
|
||||
"hint_string": "0,1"
|
||||
}
|
||||
ProjectSettings.add_property_info(music_data_property_info)
|
||||
|
||||
if !ProjectSettings.has_setting("escoria/sound/sound_volume"):
|
||||
ProjectSettings.set_setting("escoria/sound/sound_volume", 8)
|
||||
if !ProjectSettings.has_setting("escoria/sound/sfx_volume"):
|
||||
ProjectSettings.set_setting("escoria/sound/sfx_volume", 1)
|
||||
var sound_data_property_info = {
|
||||
"name": "escoria/sound/sound_volume",
|
||||
"name": "escoria/sound/sfx_volume",
|
||||
"type": TYPE_INT,
|
||||
"hint": PROPERTY_HINT_RANGE,
|
||||
"hint_string": "0,15"
|
||||
"hint_string": "0,1"
|
||||
}
|
||||
ProjectSettings.add_property_info(sound_data_property_info)
|
||||
|
||||
if !ProjectSettings.has_setting("escoria/sound/speech_volume"):
|
||||
ProjectSettings.set_setting("escoria/sound/speech_volume", 1)
|
||||
var speech_data_property_info = {
|
||||
"name": "escoria/sound/speech_volume",
|
||||
"type": TYPE_INT,
|
||||
"hint": PROPERTY_HINT_RANGE,
|
||||
"hint_string": "0,1"
|
||||
}
|
||||
ProjectSettings.add_property_info(speech_data_property_info)
|
||||
|
||||
|
||||
|
||||
# Defines platform-specific parameters. Those are the ones that must be re-set for each platform export.
|
||||
|
||||
@@ -81,19 +81,22 @@ func _ready():
|
||||
|
||||
get_tree().set_auto_accept_quit(ProjectSettings.get('escoria/main/force_quit'))
|
||||
randomize()
|
||||
save_data.load_settings([self, "settings_loaded"])
|
||||
save_data.check_settings()
|
||||
var settings = save_data.load_settings(null)
|
||||
escoria.settings = parse_json(settings)
|
||||
escoria._on_settings_loaded(escoria.settings)
|
||||
|
||||
printt("Calling resource cache start")
|
||||
resource_cache.start()
|
||||
|
||||
if !ProjectSettings.get_setting("escoria/platform/skip_cache"):
|
||||
scenes_cache_list.push_back(ProjectSettings.get_setting("escoria/main/curtain"))
|
||||
scenes_cache_list.push_back(ProjectSettings.get_setting("escoria/main/hud"))
|
||||
|
||||
printt("Cache list ", [scenes_cache_list])
|
||||
for s in scenes_cache_list:
|
||||
if s != null:
|
||||
resource_cache.queue_resource(s, false, true)
|
||||
# if !ProjectSettings.get_setting("escoria/platform/skip_cache"):
|
||||
# scenes_cache_list.push_back(ProjectSettings.get_setting("escoria/main/curtain"))
|
||||
# scenes_cache_list.push_back(ProjectSettings.get_setting("escoria/main/hud"))
|
||||
#
|
||||
# printt("Cache list ", [scenes_cache_list])
|
||||
# for s in scenes_cache_list:
|
||||
# if s != null:
|
||||
# resource_cache.queue_resource(s, false, true)
|
||||
set_process(true)
|
||||
|
||||
func _process(delta : float):
|
||||
@@ -736,7 +739,9 @@ func object_exit_scene(name : String):
|
||||
func check_obj(name, cmd):
|
||||
var obj = escoria.esc_runner.get_object(name)
|
||||
if obj == null:
|
||||
escoria.logger.report_errors("", ["Global id "+name+" not found for " + cmd])
|
||||
escoria.logger.report_errors("esc_runner.gd:check_obj()",
|
||||
["Global id "+name+" not found for " + cmd])
|
||||
return false
|
||||
return true
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
extends Script
|
||||
class_name ESCScript
|
||||
|
||||
func get_class():
|
||||
return "ESCScript"
|
||||
|
||||
func _init():
|
||||
pass
|
||||
@@ -10,8 +10,8 @@ var settings
|
||||
|
||||
func save_settings(p_data, p_callback):
|
||||
var f = File.new()
|
||||
f.open("user://settings.bin", File.WRITE)
|
||||
f.store_var(p_data)
|
||||
f.open("user://settings.json", File.WRITE)
|
||||
f.store_string(to_json(p_data))
|
||||
f.close()
|
||||
|
||||
if typeof(p_callback) != typeof(null):
|
||||
@@ -19,21 +19,37 @@ func save_settings(p_data, p_callback):
|
||||
|
||||
return OK
|
||||
|
||||
|
||||
func check_settings():
|
||||
var f = File.new()
|
||||
var error = f.open("user://settings.json", File.READ)
|
||||
if !f.is_open() and error != OK:
|
||||
match error:
|
||||
ERR_FILE_NOT_FOUND:
|
||||
f.close()
|
||||
save_settings(escoria.settings_default, null)
|
||||
|
||||
|
||||
func load_settings(p_callback):
|
||||
var f = File.new()
|
||||
f.open("user://settings.bin", File.READ)
|
||||
if !f.is_open():
|
||||
var error = f.open("user://settings.json", File.READ)
|
||||
if !f.is_open() and error != OK:
|
||||
escoria.logger.report_warnings("save_data.gd:load_settings()",
|
||||
["Failed opening settings file user://settings.json.",
|
||||
"File.open() returned " + error])
|
||||
|
||||
if typeof(p_callback) != typeof(null):
|
||||
p_callback[0].call_deferred(p_callback[1], null)
|
||||
return FAILED
|
||||
|
||||
settings = f.get_var()
|
||||
settings = f.get_as_text()
|
||||
f.close()
|
||||
|
||||
if typeof(p_callback) != typeof(null):
|
||||
p_callback[0].call_deferred(p_callback[1], settings)
|
||||
|
||||
return OK
|
||||
return settings
|
||||
|
||||
|
||||
func _get_fname(p_slot):
|
||||
|
||||
@@ -118,6 +134,7 @@ func load_slot(p_slot, p_callback):
|
||||
|
||||
return OK
|
||||
|
||||
|
||||
func load_autosave(p_callback):
|
||||
if p_callback == null:
|
||||
return FAILED
|
||||
|
||||
@@ -29,6 +29,35 @@ onready var current_state = GAME_STATE.DEFAULT
|
||||
|
||||
onready var game_size = get_viewport().size
|
||||
|
||||
# These are settings that the player can affect and save/load later
|
||||
var settings : Dictionary
|
||||
# These are default settings
|
||||
var settings_default : Dictionary = {
|
||||
# Text language
|
||||
"text_lang": ProjectSettings.get_setting("escoria/main/text_lang"),
|
||||
# Voice language
|
||||
"voice_lang": ProjectSettings.get_setting("escoria/main/voice_lang"),
|
||||
# Speech enabled
|
||||
"speech_enabled": ProjectSettings.get_setting("escoria/sound/speech_enabled"),
|
||||
# Master volume (max is 1.0)
|
||||
"master_volume": ProjectSettings.get_setting("escoria/sound/master_volume"),
|
||||
# Music volume (max is 1.0)
|
||||
"music_volume": ProjectSettings.get_setting("escoria/sound/music_volume"),
|
||||
# Sound effects volume (max is 1.0)
|
||||
"sfx_volume": ProjectSettings.get_setting("escoria/sound/sfx_volume"),
|
||||
# Voice volume (for speech only, max is 1.0)
|
||||
"voice_volume": ProjectSettings.get_setting("escoria/sound/speech_volume"),
|
||||
# Set fullscreen
|
||||
"fullscreen": false,
|
||||
# Allow dialog skipping
|
||||
"skip_dialog": true,
|
||||
# XXX: What is this? `achievements.gd` looks like iOS-only
|
||||
"rate_shown": false,
|
||||
}
|
||||
|
||||
|
||||
func _init():
|
||||
logger = load("res://addons/escoria-core/game/core-scripts/log/logging.gd").new()
|
||||
|
||||
##################################################################################
|
||||
|
||||
@@ -269,3 +298,24 @@ func ev_left_click_on_item(obj, event, default_action = false):
|
||||
# else:
|
||||
## escoria.fallback("")
|
||||
# pass
|
||||
|
||||
func _on_settings_loaded(p_settings : Dictionary):
|
||||
escoria.logger.info("******* settings loaded", p_settings)
|
||||
if p_settings != null:
|
||||
settings = p_settings
|
||||
else:
|
||||
settings = {}
|
||||
|
||||
for k in settings_default:
|
||||
if !(k in settings):
|
||||
settings[k] = settings_default[k]
|
||||
|
||||
# TODO Apply globally
|
||||
# AudioServer.set_fx_global_volume_scale(settings.sfx_volume)
|
||||
AudioServer.set_bus_volume_db(AudioServer.get_bus_index("Master"), linear2db(settings.master_volume))
|
||||
AudioServer.set_bus_volume_db(AudioServer.get_bus_index("SFX"), linear2db(settings.sfx_volume))
|
||||
AudioServer.set_bus_volume_db(AudioServer.get_bus_index("Music"), linear2db(settings.music_volume))
|
||||
TranslationServer.set_locale(settings.text_lang)
|
||||
# music_volume_changed()
|
||||
|
||||
|
||||
|
||||
@@ -10,9 +10,6 @@
|
||||
[node name="escoria" type="Node"]
|
||||
script = ExtResource( 3 )
|
||||
|
||||
[node name="inputs_manager" type="Node" parent="."]
|
||||
script = ExtResource( 5 )
|
||||
|
||||
[node name="esc_compiler" type="Node" parent="."]
|
||||
script = ExtResource( 6 )
|
||||
|
||||
@@ -22,6 +19,9 @@ script = ExtResource( 1 )
|
||||
[node name="esc_level_runner" type="Node" parent="esc_runner"]
|
||||
script = ExtResource( 4 )
|
||||
|
||||
[node name="inputs_manager" type="Node" parent="."]
|
||||
script = ExtResource( 5 )
|
||||
|
||||
[node name="main" parent="." instance=ExtResource( 2 )]
|
||||
|
||||
[editable path="main"]
|
||||
|
||||
@@ -14,3 +14,4 @@ __meta__ = {
|
||||
}
|
||||
|
||||
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
|
||||
bus = "Music"
|
||||
|
||||
@@ -14,3 +14,4 @@ __meta__ = {
|
||||
}
|
||||
|
||||
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
|
||||
bus = "SFX"
|
||||
|
||||
Reference in New Issue
Block a user