aboutsummaryrefslogtreecommitdiff
path: root/game/src/Game/Autoload
diff options
context:
space:
mode:
Diffstat (limited to 'game/src/Game/Autoload')
-rw-r--r--game/src/Game/Autoload/Argument/ArgumentParser.gd1
-rw-r--r--game/src/Game/Autoload/Events.gd61
-rw-r--r--game/src/Game/Autoload/Events/GameDebug.gd9
-rw-r--r--game/src/Game/Autoload/Events/Loader.gd6
-rw-r--r--game/src/Game/Autoload/Events/Localisation.gd34
-rw-r--r--game/src/Game/Autoload/Events/Options.gd2
-rw-r--r--game/src/Game/Autoload/Events/ShaderManager.gd49
-rw-r--r--game/src/Game/Autoload/GameLoader.gd18
8 files changed, 34 insertions, 146 deletions
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 <path>
-
- 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()