Skip to content

Instantly share code, notes, and snippets.

@GlaireDaggers
Created January 3, 2025 05:59
Show Gist options
  • Save GlaireDaggers/6e34f039cd67fc5f00a84f7eeef3706c to your computer and use it in GitHub Desktop.
Save GlaireDaggers/6e34f039cd67fc5f00a84f7eeef3706c to your computer and use it in GitHub Desktop.
Example of an autoload scene manager which loads a common scene & loads scenes as children of a viewport in that common scene
extends Node
const COMMON_SCENE = preload("res://content/scenes/sceneroot.tscn");
const DEFAULT_SCENE = preload("res://content/scenes/godot_splash.tscn");
var _sceneroot: Node;
var _loadedScenes: Array[Node] = [];
func _ready() -> void:
# instantiate common scene root
var common = COMMON_SCENE.instantiate();
add_child(common);
# get main viewport (loaded scenes should be added as children of this viewport)
_sceneroot = common.get_node("main");
# load default scene
load_scene(DEFAULT_SCENE);
pass
# load a new scene, unloading previously loaded scene(s)
func load_scene(scene: PackedScene) -> Node:
for loadedScene in _loadedScenes:
loadedScene.queue_free();
_loadedScenes.clear();
var instance = scene.instantiate();
_sceneroot.add_child(instance);
_loadedScenes.append(instance);
return instance;
# load a new scene, adding it to existing loaded scene(s)
func load_scene_additive(scene: PackedScene) -> Node:
var instance = scene.instantiate();
_sceneroot.add_child(instance);
_loadedScenes.append(instance);
return instance;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment