28 lines
1.1 KiB
GDScript
28 lines
1.1 KiB
GDScript
class_name InteractiveLoader
|
|
extends Node
|
|
|
|
|
|
func load_threaded(path: String) -> Resource:
|
|
if not is_inside_tree():
|
|
Logger.print_msg("[Interactive Loader] needs to be added to the scene tree.", -1.0, Logger.ErrTypes.WARNING)
|
|
return null
|
|
|
|
if not ResourceLoader.exists(path):
|
|
Logger.print_msg("[Interactive Loader] the given path (%s) doesn't exist." %path, -1.0, Logger.ErrTypes.WARNING)
|
|
return null
|
|
|
|
ResourceLoader.load_threaded_request(path, "", false, ResourceLoader.CACHE_MODE_REUSE)
|
|
|
|
while ResourceLoader.load_threaded_get_status(path) != ResourceLoader.THREAD_LOAD_LOADED:
|
|
match ResourceLoader.load_threaded_get_status(path):
|
|
ResourceLoader.THREAD_LOAD_FAILED || ResourceLoader.THREAD_LOAD_INVALID_RESOURCE:
|
|
Logger.print_msg("[Interactive Loader] load failed.", -1.0, Logger.ErrTypes.WARNING)
|
|
return null
|
|
|
|
if is_inside_tree():
|
|
await get_tree().process_frame
|
|
else:
|
|
Logger.print_msg("[Interactive Loader] is no longer in the scene tree. We can't wait for a process frame anymore, resulting in a freeze.", -1.0, Logger.ErrTypes.WARNING)
|
|
|
|
return ResourceLoader.load_threaded_get(path)
|