summaryrefslogtreecommitdiff
path: root/demos/misc/autoload/global.gd
diff options
context:
space:
mode:
Diffstat (limited to 'demos/misc/autoload/global.gd')
-rw-r--r--demos/misc/autoload/global.gd41
1 files changed, 17 insertions, 24 deletions
diff --git a/demos/misc/autoload/global.gd b/demos/misc/autoload/global.gd
index d1bd45461f..735995e806 100644
--- a/demos/misc/autoload/global.gd
+++ b/demos/misc/autoload/global.gd
@@ -1,43 +1,36 @@
extends Node
-var current_scene = null
+# Changing scenes is most easily done using the functions `change_scene`
+# and `change_scene_to` of the SceneTree. This script demonstrates how to
+# change scenes without those helpers.
func goto_scene(path):
-
# This function will usually be called from a signal callback,
# or some other function from the running scene.
# Deleting the current scene at this point might be
# a bad idea, because it may be inside of a callback or function of it.
# The worst case will be a crash or unexpected behavior.
-
+
# The way around this is deferring the load to a later time, when
# it is ensured that no code from the current scene is running:
-
+
call_deferred("_deferred_goto_scene",path)
func _deferred_goto_scene(path):
-
- # Immediately free the current scene,
- # there is no risk here.
- current_scene.free()
-
+ # Immediately free the current scene, there is no risk here.
+ get_tree().get_current_scene().free()
+
# Load new scene
- var s = ResourceLoader.load(path)
-
+ var packed_scene = ResourceLoader.load(path)
+
# Instance the new scene
- current_scene = s.instance()
-
- # Add it to the active scene, as child of root
- get_tree().get_root().add_child(current_scene)
-
-
-func _ready():
- # Get the current scene, the first time.
- # it is always the last child of root,
- # after the autoloaded nodes.
-
- var root = get_tree().get_root()
- current_scene = root.get_child( root.get_child_count() -1 )
+ var instanced_scene = packed_scene.instance()
+
+ # Add it to the scene tree, as direct child of root
+ get_tree().get_root().add_child(instanced_scene)
+
+ # Set it as the current scene, only after it has been added to the tree
+ get_tree().set_current_scene(instanced_scene)