diff options
Diffstat (limited to 'game/src/Game/LoadingScreen.gd')
-rw-r--r-- | game/src/Game/LoadingScreen.gd | 44 |
1 files changed, 32 insertions, 12 deletions
diff --git a/game/src/Game/LoadingScreen.gd b/game/src/Game/LoadingScreen.gd index 9d44b41..3cbf199 100644 --- a/game/src/Game/LoadingScreen.gd +++ b/game/src/Game/LoadingScreen.gd @@ -1,32 +1,52 @@ extends Control -class_name LoadingScreen +signal load_started() +signal load_changed(percentage : float) +signal load_ended() + +@export var quote_file_path : String = "res://common/quotes.txt" + +@export_subgroup("Nodes") @export var progress_bar: ProgressBar @export var quote_label: Label -var loadthread: Thread +var thread: Thread var quotes: PackedStringArray = [] -func update_loading_screen(percent_complete: int, quote_should_change = false): +func start_loading_screen(thread_safe_function : Callable) -> void: + if not is_node_ready(): + await ready + # set first quote + progress_bar.value = 0 + quote_label.text = quotes[randi() % quotes.size()] + + if thread != null and thread.is_started(): + thread.wait_to_finish() + + thread.start(thread_safe_function) + load_started.emit() + +func try_update_loading_screen(percent_complete: float, quote_should_change = false): # forces the function to behave as if deferred await get_tree().process_frame progress_bar.value = percent_complete if quote_should_change: quote_label.text = quotes[randi() % quotes.size()] - -func _on_splash_container_splash_end(): - show() + if is_equal_approx(percent_complete, 100): + thread.wait_to_finish() + load_ended.emit() + else: + load_changed.emit(percent_complete) func _ready(): + if Engine.is_editor_hint(): return + thread = Thread.new() # FS-3, UI-30, UIFUN-35 - loadthread = Thread.new() - loadthread.start(Events.load_events.bind(self)) - var quotes_file = FileAccess.open("res://common/quotes.txt", FileAccess.READ).get_as_text() + var quotes_file := FileAccess.open(quote_file_path, FileAccess.READ).get_as_text() quotes = quotes_file.split("\n",false) if quotes.is_empty(): quotes = [""] - # set first quote - quote_label.text = quotes[randi() % quotes.size()] func _exit_tree(): - loadthread.wait_to_finish() + if thread != null and thread.is_started(): + thread.wait_to_finish() |