mirror of
https://github.com/Relintai/pandemonium_demo_projects.git
synced 2024-12-21 13:56:50 +01:00
65 lines
1.6 KiB
GDScript3
65 lines
1.6 KiB
GDScript3
|
extends Control
|
||
|
|
||
|
const SIMULATED_DELAY_SEC = 0.1
|
||
|
|
||
|
var thread = null
|
||
|
|
||
|
onready var progress = $Progress
|
||
|
|
||
|
func _thread_load(path):
|
||
|
var ril = ResourceLoader.load_interactive(path)
|
||
|
assert(ril)
|
||
|
var total = ril.get_stage_count()
|
||
|
# Call deferred to configure max load steps.
|
||
|
progress.call_deferred("set_max", total)
|
||
|
|
||
|
var res = null
|
||
|
|
||
|
while true: #iterate until we have a resource
|
||
|
# Update progress bar, use call deferred, which routes to main thread.
|
||
|
progress.call_deferred("set_value", ril.get_stage())
|
||
|
# Simulate a delay.
|
||
|
OS.delay_msec(int(SIMULATED_DELAY_SEC * 1000.0))
|
||
|
# Poll (does a load step).
|
||
|
var err = ril.poll()
|
||
|
# If OK, then load another one. If EOF, it' s done. Otherwise there was an error.
|
||
|
if err == ERR_FILE_EOF:
|
||
|
# Loading done, fetch resource.
|
||
|
res = ril.get_resource()
|
||
|
break
|
||
|
elif err != OK:
|
||
|
# Not OK, there was an error.
|
||
|
print("There was an error loading")
|
||
|
break
|
||
|
|
||
|
# Send whathever we did (or did not) get.
|
||
|
call_deferred("_thread_done", res)
|
||
|
|
||
|
|
||
|
func _thread_done(resource):
|
||
|
assert(resource)
|
||
|
|
||
|
# Always wait for threads to finish, this is required on Windows.
|
||
|
thread.wait_to_finish()
|
||
|
|
||
|
# Hide the progress bar.
|
||
|
progress.hide()
|
||
|
|
||
|
# Instantiate new scene.
|
||
|
var new_scene = resource.instance()
|
||
|
# Free current scene.
|
||
|
get_tree().current_scene.free()
|
||
|
get_tree().current_scene = null
|
||
|
# Add new one to root.
|
||
|
get_tree().root.add_child(new_scene)
|
||
|
# Set as current scene.
|
||
|
get_tree().current_scene = new_scene
|
||
|
|
||
|
progress.visible = false
|
||
|
|
||
|
func load_scene(path):
|
||
|
thread = Thread.new()
|
||
|
thread.start( self, "_thread_load", path)
|
||
|
raise() # Show on top.
|
||
|
progress.visible = true
|