feat: Several fixes and optimizations (#467)
Co-authored-by: Dennis Ploeger <develop@dieploegers.de>
This commit is contained in:
@@ -2,21 +2,31 @@
|
||||
tool
|
||||
extends EditorPlugin
|
||||
|
||||
# Autoloads to instantiate
|
||||
const autoloads = {
|
||||
"escoria": "res://addons/escoria-core/game/escoria.tscn",
|
||||
}
|
||||
|
||||
|
||||
# Setup Escoria
|
||||
func _enter_tree():
|
||||
for key in autoloads.keys():
|
||||
add_autoload_singleton(key, autoloads[key])
|
||||
|
||||
add_autoload_singleton(
|
||||
"escoria",
|
||||
"res://addons/escoria-core/game/escoria.tscn"
|
||||
)
|
||||
|
||||
# Add input actions in InputMap
|
||||
InputMap.add_action("switch_action_verb")
|
||||
InputMap.add_action("esc_show_debug_prompt")
|
||||
|
||||
# Define standard settings
|
||||
ProjectSettings.set_setting(
|
||||
"application/run/main_scene",
|
||||
"res://addons/escoria-core/game/main_scene.tscn"
|
||||
)
|
||||
|
||||
ProjectSettings.set_setting(
|
||||
"audio/default_bus_layout",
|
||||
"res://addons/escoria-core/default_bus_layout.tres"
|
||||
)
|
||||
|
||||
|
||||
func _ready():
|
||||
# Prepare settings
|
||||
set_escoria_main_settings()
|
||||
set_escoria_debug_settings()
|
||||
@@ -27,14 +37,7 @@ func _enter_tree():
|
||||
|
||||
# Prepare the settings in the Escoria UI category
|
||||
func set_escoria_ui_settings():
|
||||
ProjectSettings.set_setting(
|
||||
"audio/default_bus_layout",
|
||||
"res://addons/escoria-core/default_bus_layout.tres"
|
||||
)
|
||||
if !ProjectSettings.has_setting("escoria/ui/tooltip_follows_mouse"):
|
||||
ProjectSettings.set_setting("escoria/ui/tooltip_follows_mouse", true)
|
||||
|
||||
_register_setting(
|
||||
escoria.register_setting(
|
||||
"escoria/ui/default_dialog_type",
|
||||
"",
|
||||
{
|
||||
@@ -42,62 +45,58 @@ func set_escoria_ui_settings():
|
||||
}
|
||||
)
|
||||
|
||||
if !ProjectSettings.has_setting("escoria/ui/game_scene"):
|
||||
ProjectSettings.set_setting("escoria/ui/game_scene", "")
|
||||
var game_scene_property_info = {
|
||||
escoria.register_setting(
|
||||
"escoria/ui/game_scene",
|
||||
"",
|
||||
{
|
||||
"name": "escoria/ui/game_scene",
|
||||
"type": TYPE_STRING,
|
||||
"hint": PROPERTY_HINT_FILE,
|
||||
"hint_string": "*.tscn, *.scn"
|
||||
}
|
||||
ProjectSettings.add_property_info(game_scene_property_info)
|
||||
|
||||
if !ProjectSettings.has_setting("escoria/ui/items_autoregister_path"):
|
||||
ProjectSettings.set_setting(
|
||||
"escoria/ui/items_autoregister_path",
|
||||
"res://game/items/escitems/"
|
||||
)
|
||||
var game_scene_property_info = {
|
||||
)
|
||||
|
||||
escoria.register_setting(
|
||||
"escoria/ui/items_autoregister_path",
|
||||
"res://game/items/escitems/",
|
||||
{
|
||||
"name": "escoria/ui/items_autoregister_path",
|
||||
"type": TYPE_STRING,
|
||||
"hint": PROPERTY_HINT_DIR
|
||||
}
|
||||
ProjectSettings.add_property_info(game_scene_property_info)
|
||||
)
|
||||
|
||||
if !ProjectSettings.has_setting("escoria/ui/default_transition"):
|
||||
ProjectSettings.set_setting(
|
||||
"escoria/ui/default_transition",
|
||||
"curtain"
|
||||
)
|
||||
ProjectSettings.add_property_info({
|
||||
escoria.register_setting(
|
||||
"escoria/ui/default_transition",
|
||||
"curtain",
|
||||
{
|
||||
"name": "escoria/ui/default_transition",
|
||||
"type": TYPE_STRING
|
||||
})
|
||||
|
||||
if !ProjectSettings.has_setting("escoria/ui/transition_paths"):
|
||||
ProjectSettings.set_setting(
|
||||
"escoria/ui/transition_paths",
|
||||
[
|
||||
"res://addons/escoria-core/game/scenes/transitions/shaders/"
|
||||
]
|
||||
)
|
||||
ProjectSettings.add_property_info({
|
||||
}
|
||||
)
|
||||
|
||||
escoria.register_setting(
|
||||
"escoria/ui/transition_paths",
|
||||
[
|
||||
"res://addons/escoria-core/game/scenes/transitions/shaders/"
|
||||
],
|
||||
{
|
||||
"name": "escoria/ui/transition_paths",
|
||||
"type": TYPE_STRING_ARRAY,
|
||||
"hint": PROPERTY_HINT_DIR
|
||||
})
|
||||
|
||||
if !ProjectSettings.has_setting("escoria/ui/inventory_item_size"):
|
||||
ProjectSettings.set_setting(
|
||||
"escoria/ui/inventory_item_size",
|
||||
Vector2(72, 72)
|
||||
)
|
||||
ProjectSettings.add_property_info({
|
||||
}
|
||||
)
|
||||
|
||||
escoria.register_setting(
|
||||
"escoria/ui/inventory_item_size",
|
||||
Vector2(72, 72),
|
||||
{
|
||||
"name": "escoria/ui/inventory_item_size",
|
||||
"type": TYPE_VECTOR2
|
||||
})
|
||||
}
|
||||
)
|
||||
|
||||
_register_setting(
|
||||
escoria.register_setting(
|
||||
"escoria/ui/dialog_managers",
|
||||
[],
|
||||
{
|
||||
@@ -107,196 +106,195 @@ func set_escoria_ui_settings():
|
||||
|
||||
# Prepare the settings in the Escoria main category
|
||||
func set_escoria_main_settings():
|
||||
|
||||
if !ProjectSettings.has_setting("escoria/main/game_version"):
|
||||
ProjectSettings.set_setting("escoria/main/game_version", "")
|
||||
var game_version_property_info = {
|
||||
"name": "escoria/main/game_version",
|
||||
escoria.register_setting(
|
||||
"escoria/main/game_version",
|
||||
"",
|
||||
{
|
||||
"type": TYPE_STRING
|
||||
}
|
||||
ProjectSettings.add_property_info(game_version_property_info)
|
||||
)
|
||||
|
||||
if !ProjectSettings.has_setting("escoria/main/game_start_script"):
|
||||
ProjectSettings.set_setting("escoria/main/game_start_script", "")
|
||||
var game_start_script_property_info = {
|
||||
"name": "escoria/main/game_start_script",
|
||||
escoria.register_setting(
|
||||
"escoria/main/game_start_script",
|
||||
"",
|
||||
{
|
||||
"type": TYPE_STRING,
|
||||
"hint": PROPERTY_HINT_FILE,
|
||||
"hint_string": "*.esc"
|
||||
}
|
||||
ProjectSettings.add_property_info(game_start_script_property_info)
|
||||
)
|
||||
|
||||
if !ProjectSettings.has_setting("escoria/main/force_quit"):
|
||||
ProjectSettings.set_setting("escoria/main/force_quit", true)
|
||||
var force_quit_property_info = {
|
||||
"name": "escoria/main/force_quit",
|
||||
escoria.register_setting(
|
||||
"escoria/main/force_quit",
|
||||
true,
|
||||
{
|
||||
"type": TYPE_BOOL
|
||||
}
|
||||
ProjectSettings.add_property_info(force_quit_property_info)
|
||||
)
|
||||
|
||||
ProjectSettings.set_setting("application/run/main_scene", "res://addons/escoria-core/game/main_scene.tscn")
|
||||
|
||||
if not ProjectSettings.has_setting("escoria/main/command_directories"):
|
||||
ProjectSettings.set_setting("escoria/main/command_directories", [
|
||||
escoria.register_setting(
|
||||
"escoria/main/command_directories",
|
||||
[
|
||||
"res://addons/escoria-core/game/core-scripts/esc/commands"
|
||||
])
|
||||
ProjectSettings.add_property_info({
|
||||
"name": "escoria/main/command_directories",
|
||||
],
|
||||
{
|
||||
"type": TYPE_ARRAY,
|
||||
})
|
||||
|
||||
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)
|
||||
|
||||
if !ProjectSettings.has_setting("escoria/main/savegames_path"):
|
||||
ProjectSettings.set_setting(
|
||||
"escoria/main/savegames_path",
|
||||
"user://saves/"
|
||||
)
|
||||
var savegames_path_property_info = {
|
||||
"name": "escoria/main/savegames_path",
|
||||
"type": TYPE_STRING,
|
||||
"hint": PROPERTY_HINT_DIR
|
||||
}
|
||||
ProjectSettings.add_property_info(savegames_path_property_info)
|
||||
)
|
||||
|
||||
if !ProjectSettings.has_setting("escoria/main/settings_path"):
|
||||
ProjectSettings.set_setting(
|
||||
"escoria/main/settings_path",
|
||||
"user://"
|
||||
)
|
||||
var settings_path_property_info = {
|
||||
"name": "escoria/main/settings_path",
|
||||
escoria.register_setting(
|
||||
"escoria/main/text_lang",
|
||||
TranslationServer.get_locale(),
|
||||
{
|
||||
"type": TYPE_STRING,
|
||||
"hint": PROPERTY_HINT_NONE
|
||||
}
|
||||
)
|
||||
|
||||
escoria.register_setting(
|
||||
"escoria/main/voice_lang",
|
||||
TranslationServer.get_locale(),
|
||||
{
|
||||
"type": TYPE_STRING,
|
||||
"hint": PROPERTY_HINT_NONE
|
||||
}
|
||||
)
|
||||
|
||||
escoria.register_setting(
|
||||
"escoria/main/savegames_path",
|
||||
"user://saves/",
|
||||
{
|
||||
"type": TYPE_STRING,
|
||||
"hint": PROPERTY_HINT_DIR
|
||||
}
|
||||
ProjectSettings.add_property_info(settings_path_property_info)
|
||||
)
|
||||
|
||||
escoria.register_setting(
|
||||
"escoria/main/settings_path",
|
||||
"user://",
|
||||
{
|
||||
"type": TYPE_STRING,
|
||||
"hint": PROPERTY_HINT_DIR
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
# Prepare the settings in the Escoria debug category
|
||||
func set_escoria_debug_settings():
|
||||
if !ProjectSettings.has_setting("escoria/debug/terminate_on_warnings"):
|
||||
ProjectSettings.set_setting("escoria/debug/terminate_on_warnings", false)
|
||||
escoria.register_setting(
|
||||
"escoria/debug/terminate_on_warnings",
|
||||
false,
|
||||
{
|
||||
"type": TYPE_BOOL
|
||||
}
|
||||
)
|
||||
|
||||
if !ProjectSettings.has_setting("escoria/debug/terminate_on_errors"):
|
||||
ProjectSettings.set_setting("escoria/debug/terminate_on_errors", true)
|
||||
escoria.register_setting(
|
||||
"escoria/debug/terminate_on_errors",
|
||||
true,
|
||||
{
|
||||
"type": TYPE_BOOL
|
||||
}
|
||||
)
|
||||
|
||||
# Main language the game is developed in. Useful for translation management
|
||||
if !ProjectSettings.has_setting("escoria/debug/development_lang"):
|
||||
ProjectSettings.set_setting("escoria/debug/development_lang", "en")
|
||||
|
||||
# Assure log level preference
|
||||
if not ProjectSettings.has_setting("escoria/debug/log_level"):
|
||||
ProjectSettings.set_setting("escoria/debug/log_level", "ERROR")
|
||||
var property_info = {
|
||||
"name": "escoria/debug/log_level",
|
||||
escoria.register_setting(
|
||||
"escoria/debug/development_lang",
|
||||
"en",
|
||||
{
|
||||
"type": TYPE_STRING
|
||||
}
|
||||
)
|
||||
|
||||
escoria.register_setting(
|
||||
"escoria/debug/log_level",
|
||||
"ERROR",
|
||||
{
|
||||
"type": TYPE_STRING,
|
||||
"hint": PROPERTY_HINT_ENUM,
|
||||
"hint_string": "ERROR,WARNING,INFO,DEBUG"
|
||||
}
|
||||
ProjectSettings.add_property_info(property_info)
|
||||
)
|
||||
|
||||
# Define output log file path
|
||||
if not ProjectSettings.has_setting("escoria/debug/log_file_path"):
|
||||
ProjectSettings.set_setting("escoria/debug/log_file_path", "user://")
|
||||
var property_info = {
|
||||
"name": "escoria/debug/log_file_path",
|
||||
escoria.register_setting(
|
||||
"escoria/debug/log_file_path",
|
||||
"user://",
|
||||
{
|
||||
"type": TYPE_STRING,
|
||||
"hint": PROPERTY_HINT_DIR
|
||||
}
|
||||
ProjectSettings.add_property_info(property_info)
|
||||
)
|
||||
|
||||
# Define crash message
|
||||
if not ProjectSettings.has_setting("escoria/debug/crash_message"):
|
||||
ProjectSettings.set_setting(
|
||||
"escoria/debug/crash_message",
|
||||
"We're sorry, but the game crashed. Please send us the " +
|
||||
"following files:\n\n%s"
|
||||
)
|
||||
var property_info = {
|
||||
"name": "escoria/debug/crash_message",
|
||||
escoria.register_setting(
|
||||
"escoria/debug/crash_message",
|
||||
"We're sorry, but the game crashed. Please send us the " +
|
||||
"following files:\n\n%s",
|
||||
{
|
||||
"type": TYPE_STRING,
|
||||
"hint": PROPERTY_HINT_MULTILINE_TEXT
|
||||
}
|
||||
ProjectSettings.add_property_info(property_info)
|
||||
)
|
||||
|
||||
# Room selector preference
|
||||
if not ProjectSettings.has_setting("escoria/debug/enable_room_selector"):
|
||||
ProjectSettings.set_setting("escoria/debug/enable_room_selector", false)
|
||||
var property_info = {
|
||||
"name": "escoria/debug/enable_room_selector",
|
||||
escoria.register_setting(
|
||||
"escoria/debug/enable_room_selector",
|
||||
false,
|
||||
{
|
||||
"type": TYPE_BOOL
|
||||
}
|
||||
ProjectSettings.add_property_info(property_info)
|
||||
|
||||
if not ProjectSettings.has_setting("escoria/debug/room_selector_room_dir"):
|
||||
ProjectSettings.set_setting("escoria/debug/room_selector_room_dir", "")
|
||||
var property_info = {
|
||||
"name": "escoria/debug/room_selector_room_dir",
|
||||
)
|
||||
|
||||
escoria.register_setting(
|
||||
"escoria/debug/room_selector_room_dir",
|
||||
"",
|
||||
{
|
||||
"type": TYPE_STRING,
|
||||
"hint": PROPERTY_HINT_DIR
|
||||
}
|
||||
ProjectSettings.add_property_info(property_info)
|
||||
)
|
||||
|
||||
|
||||
# Prepare the settings in the Escoria sound 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",
|
||||
escoria.register_setting(
|
||||
"escoria/sound/master_volume",
|
||||
1,
|
||||
{
|
||||
"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", 1)
|
||||
var music_data_property_info = {
|
||||
"name": "escoria/sound/music_volume",
|
||||
"type": TYPE_INT,
|
||||
"hint": PROPERTY_HINT_RANGE,
|
||||
"hint_string": "0,1"
|
||||
}
|
||||
ProjectSettings.add_property_info(music_data_property_info)
|
||||
|
||||
if !ProjectSettings.has_setting("escoria/sound/sfx_volume"):
|
||||
ProjectSettings.set_setting("escoria/sound/sfx_volume", 1)
|
||||
var sound_data_property_info = {
|
||||
"name": "escoria/sound/sfx_volume",
|
||||
"type": TYPE_INT,
|
||||
"hint": PROPERTY_HINT_RANGE,
|
||||
"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",
|
||||
escoria.register_setting(
|
||||
"escoria/sound/music_volume",
|
||||
1,
|
||||
{
|
||||
"type": TYPE_INT,
|
||||
"hint": PROPERTY_HINT_RANGE,
|
||||
"hint_string": "0,1"
|
||||
}
|
||||
ProjectSettings.add_property_info(speech_data_property_info)
|
||||
)
|
||||
|
||||
_register_setting(
|
||||
escoria.register_setting(
|
||||
"escoria/sound/sfx_volume",
|
||||
1,
|
||||
{
|
||||
"type": TYPE_INT,
|
||||
"hint": PROPERTY_HINT_RANGE,
|
||||
"hint_string": "0,1"
|
||||
}
|
||||
)
|
||||
|
||||
escoria.register_setting(
|
||||
"escoria/sound/speech_volume",
|
||||
1,
|
||||
{
|
||||
"type": TYPE_INT,
|
||||
"hint": PROPERTY_HINT_RANGE,
|
||||
"hint_string": "0,1"
|
||||
}
|
||||
)
|
||||
|
||||
escoria.register_setting(
|
||||
"escoria/sound/speech_enabled",
|
||||
1,
|
||||
{
|
||||
@@ -304,7 +302,7 @@ func set_escoria_sound_settings():
|
||||
}
|
||||
)
|
||||
|
||||
_register_setting(
|
||||
escoria.register_setting(
|
||||
"escoria/sound/speech_folder",
|
||||
"res://speech",
|
||||
{
|
||||
@@ -313,7 +311,7 @@ func set_escoria_sound_settings():
|
||||
}
|
||||
)
|
||||
|
||||
_register_setting(
|
||||
escoria.register_setting(
|
||||
"escoria/sound/speech_extension",
|
||||
"ogg",
|
||||
{
|
||||
@@ -322,23 +320,6 @@ func set_escoria_sound_settings():
|
||||
)
|
||||
|
||||
|
||||
# Register a new project setting if it hasn't been defined already
|
||||
#
|
||||
# #### Parameters
|
||||
#
|
||||
# - name: Name of the project setting
|
||||
# - default: Default value
|
||||
# - info: Property info for the setting
|
||||
func _register_setting(name: String, default, info: Dictionary):
|
||||
if not ProjectSettings.has_setting(name):
|
||||
ProjectSettings.set_setting(
|
||||
name,
|
||||
default
|
||||
)
|
||||
info.name = name
|
||||
ProjectSettings.add_property_info(info)
|
||||
|
||||
|
||||
# Prepare the settings in the Escoria platform category and may need special
|
||||
# setting per build
|
||||
func set_escoria_platform_settings():
|
||||
@@ -346,18 +327,26 @@ func set_escoria_platform_settings():
|
||||
# scenes.
|
||||
# If set to true, all generic scenes (UI, inventory, etc) will be loaded
|
||||
# as any other scene.
|
||||
if !ProjectSettings.has_setting("escoria/platform/skip_cache"):
|
||||
ProjectSettings.set_setting("escoria/platform/skip_cache", false)
|
||||
if !ProjectSettings.has_setting("escoria/platform/skip_cache.mobile"):
|
||||
ProjectSettings.set_setting("escoria/platform/skip_cache.mobile", true)
|
||||
escoria.register_setting(
|
||||
"escoria/platform/skip_cache",
|
||||
false,
|
||||
{
|
||||
"type": TYPE_BOOL
|
||||
}
|
||||
)
|
||||
|
||||
escoria.register_setting(
|
||||
"escoria/platform/skip_cache.mobile",
|
||||
true,
|
||||
{
|
||||
"type": "TYPE_BOOL"
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
# Uninstall plugin
|
||||
func _exit_tree():
|
||||
for key in autoloads.keys():
|
||||
if ProjectSettings.has_setting(key):
|
||||
remove_autoload_singleton(key)
|
||||
remove_autoload_singleton("escoria")
|
||||
|
||||
InputMap.erase_action("switch_action_verb")
|
||||
InputMap.erase_action("esc_show_debug_prompt")
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user