Created
January 3, 2025 05:59
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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