aboutsummaryrefslogtreecommitdiff
path: root/game/src/Game/LoadingScreen.gd
blob: c1bfdc62a3773518a9266f384ea8b3ddc8115277 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
extends Control

@export var quote_file_path : String = "res://common/quotes.txt"

@export_subgroup("Nodes")
@export var progress_bar: ProgressBar
@export var quote_label: Label
@export var animation_player: AnimationPlayer

var thread: Thread
var quotes: PackedStringArray = []

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)

func try_update_loading_screen(percent_complete: float, quote_should_change := false) -> void:
   # 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 _ready() -> void:
   if Engine.is_editor_hint(): return
   thread = Thread.new()
   # FS-3, UI-30, UIFUN-35
   var quotes_file := FileAccess.open(quote_file_path, FileAccess.READ).get_as_text()
   quotes = quotes_file.split("\n", false)
   if quotes.is_empty():
      quotes = [""]
   animation_player.play("loadingscreen_gear")

func _exit_tree() -> void:
   if thread != null and thread.is_started():
      thread.wait_to_finish()