From 86bee7b44c7cc7adaef8cdf441667a99223dd98a Mon Sep 17 00:00:00 2001 From: Spartan322 Date: Thu, 6 Jul 2023 16:28:55 -0400 Subject: Add GameLoader Autoload to handle global loading data Remove GameDebug, Localization, and ShaderManager from Events.gd Renamed OptionsSingleton class_name to OptionsEventsObject Add Events.Loader to handle Loader events (which are global signals) Make GameDebug singleton with static functions and property Make Localization functions static Move ShaderManager variable to GameLoader Move Events._define_filepaths_dict to GameLoader.define_filepaths_dict Move game initialization from LoadingScreen.gd and Events.gd to GameStart.gd Attach GameStart.gd to GameStart.tscn root Make LoadingScreen generalized and so it is reusable Remove class_name from LoaderingScreen.gd --- game/src/Game/Autoload/Argument/ArgumentParser.gd | 1 + game/src/Game/Autoload/Events.gd | 61 +++-------------------- game/src/Game/Autoload/Events/GameDebug.gd | 9 ---- game/src/Game/Autoload/Events/Loader.gd | 6 +++ game/src/Game/Autoload/Events/Localisation.gd | 34 ------------- game/src/Game/Autoload/Events/Options.gd | 2 +- game/src/Game/Autoload/Events/ShaderManager.gd | 49 ------------------ game/src/Game/Autoload/GameLoader.gd | 18 +++++++ 8 files changed, 34 insertions(+), 146 deletions(-) delete mode 100644 game/src/Game/Autoload/Events/GameDebug.gd create mode 100644 game/src/Game/Autoload/Events/Loader.gd delete mode 100644 game/src/Game/Autoload/Events/Localisation.gd delete mode 100644 game/src/Game/Autoload/Events/ShaderManager.gd create mode 100644 game/src/Game/Autoload/GameLoader.gd (limited to 'game/src/Game/Autoload') diff --git a/game/src/Game/Autoload/Argument/ArgumentParser.gd b/game/src/Game/Autoload/Argument/ArgumentParser.gd index 123a733..b463c74 100644 --- a/game/src/Game/Autoload/Argument/ArgumentParser.gd +++ b/game/src/Game/Autoload/Argument/ArgumentParser.gd @@ -312,6 +312,7 @@ Options: func _ready(): if Engine.is_editor_hint(): return _set_argument_setting() + GameDebug._singleton = GameDebug.new() if get_argument(&"help"): _print_help() get_tree().quit() diff --git a/game/src/Game/Autoload/Events.gd b/game/src/Game/Autoload/Events.gd index f979301..da12bf6 100644 --- a/game/src/Game/Autoload/Events.gd +++ b/game/src/Game/Autoload/Events.gd @@ -1,56 +1,11 @@ +## Events are exclusively for the purpose of handling global signals +## This is to reduce "signal bubbling" which is when a signal callback is used to "bubble" the signal callbacks up the scene tree. +## It does such by providing a global interface of signals that are connected to and emitted by that are garunteed to exist. extends Node -var GameDebug: GameDebugSingleton -var Options: OptionsSingleton -var Localisation: LocalisationSingleton -var ShaderManager: ShaderManagerSingleton +var Loader: LoaderEventsObject +var Options: OptionsEventsObject -var _define_filepaths_dict : Dictionary = { - GameSingleton.get_province_identifier_file_key(): "res://common/map/provinces.json", - GameSingleton.get_water_province_file_key(): "res://common/map/water.json", - GameSingleton.get_region_file_key(): "res://common/map/regions.json", - GameSingleton.get_terrain_variant_file_key(): "res://common/map/terrain.json", - GameSingleton.get_terrain_texture_dir_key(): "res://art/terrain/", - GameSingleton.get_province_image_file_key(): "res://common/map/provinces.png", - GameSingleton.get_terrain_image_file_key(): "res://common/map/terrain.png", - GameSingleton.get_goods_file_key(): "res://common/goods.json", - GameSingleton.get_good_icons_dir_key(): "res://art/economy/goods" -} - -# REQUIREMENTS -# * FS-333, FS-334, FS-335, FS-341 -func load_events(loading_screen: LoadingScreen): - GameSingleton.setup_logger() - loading_screen.update_loading_screen(5) - - # Set this to your Vic2 install dir or a mod's dir to enable compatibility mode - # (this won't work for mods which rely on vanilla map assets, copy missing assets - # into the mod's dir for a temporary fix) - # Usage: OpenVic --compatibility-mode - - var compatibility_mode_path : String = ArgumentParser.get_argument(&"compatibility-mode") - - var start := Time.get_ticks_usec() - - GameDebug = GameDebugSingleton.new() - loading_screen.update_loading_screen(15) - Options = OptionsSingleton.new() - loading_screen.update_loading_screen(25) - Localisation = LocalisationSingleton.new() - loading_screen.update_loading_screen(45) - ShaderManager = ShaderManagerSingleton.new() - loading_screen.update_loading_screen(50, true) - - if compatibility_mode_path: - if GameSingleton.load_defines_compatibility_mode(compatibility_mode_path) != OK: - push_error("Errors loading game defines!") - else: - if GameSingleton.load_defines(_define_filepaths_dict) != OK: - push_error("Errors loading game defines!") - - loading_screen.update_loading_screen(100) - var end := Time.get_ticks_usec() - print("Loading took ", float(end - start) / 1000000, " seconds") - - # change scene in a thread-safe way - get_tree().call_deferred("change_scene_to_file", "res://src/Game/GameMenu.tscn") +func _init(): + Loader = LoaderEventsObject.new() + Options = OptionsEventsObject.new() diff --git a/game/src/Game/Autoload/Events/GameDebug.gd b/game/src/Game/Autoload/Events/GameDebug.gd deleted file mode 100644 index 9e18343..0000000 --- a/game/src/Game/Autoload/Events/GameDebug.gd +++ /dev/null @@ -1,9 +0,0 @@ -extends RefCounted -class_name GameDebugSingleton - -func set_debug_mode(value : bool) -> void: - ArgumentParser.set_argument(&"game-debug", value) - print("Set debug mode to: ", value) - -func is_debug_mode() -> bool: - return ArgumentParser.get_argument(&"game-debug", false) diff --git a/game/src/Game/Autoload/Events/Loader.gd b/game/src/Game/Autoload/Events/Loader.gd new file mode 100644 index 0000000..c17dc6f --- /dev/null +++ b/game/src/Game/Autoload/Events/Loader.gd @@ -0,0 +1,6 @@ +class_name LoaderEventsObject +extends RefCounted + +signal startup_load_begun() +signal startup_load_changed(percentage : float) +signal startup_load_ended() diff --git a/game/src/Game/Autoload/Events/Localisation.gd b/game/src/Game/Autoload/Events/Localisation.gd deleted file mode 100644 index 37b550d..0000000 --- a/game/src/Game/Autoload/Events/Localisation.gd +++ /dev/null @@ -1,34 +0,0 @@ -extends RefCounted -class_name LocalisationSingleton - -# REQUIREMENTS -# * SS-59, SS-60, SS-61 -func get_default_locale() -> String: - var locales := TranslationServer.get_loaded_locales() - var default_locale := OS.get_locale() - if default_locale in locales: - return default_locale - var default_language := OS.get_locale_language() - for locale in locales: - if locale.begins_with(default_language): - return default_language - return ProjectSettings.get_setting("internationalization/locale/fallback", "en_GB") - -func load_localisation(dir_path : String) -> void: - if LoadLocalisation.load_localisation_dir(dir_path) != OK: - push_error("Error loading localisation directory: ", dir_path) - var loaded_locales : PackedStringArray = TranslationServer.get_loaded_locales() - print("Loaded ", loaded_locales.size(), " locales: ", loaded_locales) - -# REQUIREMENTS -# * SS-57 -# * FS-17 -func _init(): - var localisation_dir_path : String = ProjectSettings.get_setting("internationalization/locale/localisation_path", "") - if localisation_dir_path.is_empty(): - push_error("Missing localisation_path setting!") - else: - load_localisation(localisation_dir_path) - -func tr_number(num) -> String: - return TextServerManager.get_primary_interface().format_number(str(num)) diff --git a/game/src/Game/Autoload/Events/Options.gd b/game/src/Game/Autoload/Events/Options.gd index 2e9b90b..08f34db 100644 --- a/game/src/Game/Autoload/Events/Options.gd +++ b/game/src/Game/Autoload/Events/Options.gd @@ -1,5 +1,5 @@ +class_name OptionsEventsObject extends RefCounted -class_name OptionsSingleton signal save_settings(save_file: ConfigFile) signal load_settings(load_file: ConfigFile) diff --git a/game/src/Game/Autoload/Events/ShaderManager.gd b/game/src/Game/Autoload/Events/ShaderManager.gd deleted file mode 100644 index 731dc3c..0000000 --- a/game/src/Game/Autoload/Events/ShaderManager.gd +++ /dev/null @@ -1,49 +0,0 @@ -extends RefCounted -class_name ShaderManagerSingleton - -const param_province_shape_tex : StringName = &"province_shape_tex" -const param_province_shape_subdivisions : StringName = &"province_shape_subdivisions" -const param_province_colour_tex : StringName = &"province_colour_tex" -const param_hover_index : StringName = &"hover_index" -const param_selected_index : StringName = &"selected_index" -const param_terrain_tex : StringName = &"terrain_tex" -const param_terrain_tile_factor : StringName = &"terrain_tile_factor" - -func set_up_shader(material : Material, add_cosmetic_textures : bool) -> Error: - # Shader Material - if material == null: - push_error("material is null!") - return FAILED - if not material is ShaderMaterial: - push_error("Invalid map mesh material class: ", material.get_class()) - return FAILED - var shader_material : ShaderMaterial = material - - # Province shape texture - var province_shape_texture := GameSingleton.get_province_shape_texture() - if province_shape_texture == null: - push_error("Failed to get province shape texture!") - return FAILED - shader_material.set_shader_parameter(param_province_shape_tex, province_shape_texture) - var subdivisions := GameSingleton.get_province_shape_image_subdivisions() - if subdivisions.x < 1 or subdivisions.y < 1: - push_error("Invalid province shape image subdivision: ", subdivisions.x, "x", subdivisions.y) - return FAILED - shader_material.set_shader_parameter(param_province_shape_subdivisions, Vector2(subdivisions)) - - if add_cosmetic_textures: - # Province colour texture - var map_province_colour_texture := GameSingleton.get_province_colour_texture() - if map_province_colour_texture == null: - push_error("Failed to get province colour image!") - return FAILED - shader_material.set_shader_parameter(param_province_colour_tex, map_province_colour_texture) - - # Terrain texture - var terrain_texture := GameSingleton.get_terrain_texture() - if terrain_texture == null: - push_error("Failed to get terrain texture!") - return FAILED - shader_material.set_shader_parameter(param_terrain_tex, terrain_texture) - - return OK diff --git a/game/src/Game/Autoload/GameLoader.gd b/game/src/Game/Autoload/GameLoader.gd new file mode 100644 index 0000000..1720e3c --- /dev/null +++ b/game/src/Game/Autoload/GameLoader.gd @@ -0,0 +1,18 @@ +extends Node + +var define_filepaths_dict : Dictionary = { + GameSingleton.get_province_identifier_file_key(): "res://common/map/provinces.json", + GameSingleton.get_water_province_file_key(): "res://common/map/water.json", + GameSingleton.get_region_file_key(): "res://common/map/regions.json", + GameSingleton.get_terrain_variant_file_key(): "res://common/map/terrain.json", + GameSingleton.get_terrain_texture_dir_key(): "res://art/terrain/", + GameSingleton.get_province_image_file_key(): "res://common/map/provinces.png", + GameSingleton.get_terrain_image_file_key(): "res://common/map/terrain.png", + GameSingleton.get_goods_file_key(): "res://common/goods.json", + GameSingleton.get_good_icons_dir_key(): "res://art/economy/goods" +} + +var ShaderManager : ShaderManagerClass + +func _init(): + ShaderManager = ShaderManagerClass.new() -- cgit v1.2.3-56-ga3b1