ImmersiveRPG / GodotAsyncLoader

A Godot plugin to load, instance, and add scenes asynchronously using a background thread.
https://godotengine.org/asset-library/asset/1376
MIT License
38 stars 5 forks source link

Add error handler callback #13

Open workhorsy opened 2 years ago

workhorsy commented 2 years ago

Because AsyncLoader.load_scene_async_with_cb is async, there is a chance that the target, instance, and cb have been deleted before use. So we would have to do a bunch of checks for each callback. Rather than do that, have a callback that is called on any of these situations.

func _on_orange_loaded_cb(instance : Node, data : Dictionary) -> void:
    # Just return if target is invalid
    if not is_instance_valid(target):
        return

    # Just return if instance is invalid
    if not is_instance_valid(instance):
        return

    # Just return if the cb is invalid
    if cb != null and not cb.is_valid():
        return
func _on_error(instance : Node, data : Dictionary) -> void:
    # Just return if target is invalid
    if not is_instance_valid(target):
        return

    # Just return if instance is invalid
    if not is_instance_valid(instance):
        return

    # Just return if the cb is invalid
    if cb != null and not cb.is_valid():
        return

AsyncLoader.start(groups, 100, funcref(self,"_on_error" ))