32 lines
1.2 KiB
GDScript
32 lines
1.2 KiB
GDScript
class_name LoadSingleton extends Node
|
|
|
|
signal loadStart(scenePath:String, loadId:int)
|
|
signal loadEnd(scenePath:String, loadId:int, resource:Resource)
|
|
signal loadError(scenePath:String, loadId:int, error:String)
|
|
signal loadProgress(scenePath:String, loadId:int, progress:float)
|
|
|
|
var watchingIds:Array[int] = []
|
|
|
|
func _process(delta: float) -> void:
|
|
var wIds = watchingIds.duplicate()
|
|
for watchId in wIds:
|
|
var status = ResourceLoader.load_threaded_get_status(watchId)
|
|
if status == ResourceLoader.ThreadLoadStatus.THREAD_LOAD_LOADED:
|
|
watchingIds.erase(watchId)
|
|
var resource = ResourceLoader.load_threaded_get(watchId)
|
|
loadEnd.emit(watchId, resource)
|
|
elif status == ResourceLoader.ThreadLoadStatus.THREAD_LOAD_FAILED:
|
|
watchingIds.erase(watchId)
|
|
loadError.emit(watchId, "Error loading resource.")
|
|
elif status == ResourceLoader.ThreadLoadStatus.THREAD_LOAD_INVALID_RESOURCE:
|
|
watchingIds.erase(watchId)
|
|
loadError.emit(watchId, "Invalid Resource.")
|
|
elif status == ResourceLoader.ThreadLoadStatus.THREAD_LOAD_IN_PROGRESS:
|
|
loadProgress.emit(watchId, 0.0)
|
|
pass
|
|
|
|
func load(scenePath:String) -> int:
|
|
var loadId = ResourceLoader.load_threaded_request(scenePath)
|
|
watchingIds.append(loadId)
|
|
loadStart.emit(scenePath, loadId)
|
|
return loadId |