aboutsummaryrefslogtreecommitdiff
path: root/game/src/Game/GameStart.gd
diff options
context:
space:
mode:
author George L. Albany <Megacake1234@gmail.com>2023-07-09 02:14:54 +0200
committer GitHub <noreply@github.com>2023-07-09 02:14:54 +0200
commit1d8accc1ca6b30120732c56233e5d74e860de1bb (patch)
tree97c167b06a8b2f2b868107414b5676ccb5fcb53b /game/src/Game/GameStart.gd
parentd05bff0c40a482a9bb44877fe76b1e0efb2e1a68 (diff)
parent86bee7b44c7cc7adaef8cdf441667a99223dd98a (diff)
Merge pull request #135 from Spartan322/generalize/loading-and-events
Diffstat (limited to 'game/src/Game/GameStart.gd')
-rw-r--r--game/src/Game/GameStart.gd60
1 files changed, 60 insertions, 0 deletions
diff --git a/game/src/Game/GameStart.gd b/game/src/Game/GameStart.gd
new file mode 100644
index 0000000..995541f
--- /dev/null
+++ b/game/src/Game/GameStart.gd
@@ -0,0 +1,60 @@
+extends Control
+
+const LoadingScreen = preload("res://src/Game/LoadingScreen.gd")
+
+@export_subgroup("Nodes")
+@export var loading_screen : LoadingScreen
+
+func _ready() -> void:
+ loading_screen.start_loading_screen(_initialize_game)
+
+# REQUIREMENTS
+# * FS-333, FS-334, FS-335, FS-341
+func _initialize_game() -> void:
+ GameSingleton.setup_logger()
+ loading_screen.try_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()
+
+ loading_screen.try_update_loading_screen(15)
+ loading_screen.try_update_loading_screen(25)
+ Localisation.initialize()
+ loading_screen.try_update_loading_screen(45)
+ loading_screen.try_update_loading_screen(50, true)
+
+ # TODO: Loading takes way too long to keep the LoadingScreen at 50%
+ # Should either split this up or seperately multithread the compatibility mode loader
+ # Or both and emit a signal that allows us to add percentages to the LoadingScreen
+ if compatibility_mode_path:
+ if GameSingleton.load_defines_compatibility_mode(compatibility_mode_path) != OK:
+ push_error("Errors loading game defines!")
+ else:
+ GameLoader.define_filepaths_dict.make_read_only()
+ if GameSingleton.load_defines(GameLoader.define_filepaths_dict) != OK:
+ push_error("Errors loading game defines!")
+
+ loading_screen.try_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 _on_splash_container_splash_end():
+ loading_screen.show()
+
+func _on_loading_screen_load_started():
+ Events.Loader.startup_load_begun.emit()
+
+func _on_loading_screen_load_changed(percentage : float) -> void:
+ Events.Loader.startup_load_changed.emit(percentage)
+
+func _on_loading_screen_load_ended():
+ Events.Loader.startup_load_ended.emit()