scene manager system

This commit is contained in:
Haze Weathers 2025-02-27 02:12:49 -05:00
parent aa6b9cb4aa
commit cc177f7beb
6 changed files with 74 additions and 3 deletions

View file

@ -0,0 +1,30 @@
extends Node
@export var scene_parent: Node
var current_scene: Node
func _ready() -> void:
var tree = get_tree()
# capture main scene
if tree.current_scene != self:
change_scene(tree.current_scene)
tree.current_scene = self
func change_scene(new_scene: Node) -> void:
# avoid infinite recursion :P
if current_scene == new_scene:
return
# remove current scene
if current_scene:
scene_parent.remove_child(current_scene)
current_scene.queue_free()
# add new scene
if new_scene.is_inside_tree():
new_scene.get_parent().remove_child.call_deferred(new_scene)
scene_parent.add_child.call_deferred(new_scene)
current_scene = new_scene

View file

@ -0,0 +1,37 @@
[gd_scene load_steps=2 format=3 uid="uid://dxrvocxjk8vs3"]
[ext_resource type="Script" path="res://autoloads/scene_manager.gd" id="1_d112a"]
[node name="SceneManager" type="Node" node_paths=PackedStringArray("scene_parent")]
script = ExtResource("1_d112a")
scene_parent = NodePath("HBoxContainer/MainView/SubViewportContainer/SubViewport")
[node name="HBoxContainer" type="HBoxContainer" parent="."]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="SideBar" type="Control" parent="HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
[node name="MainView" type="Control" parent="HBoxContainer"]
custom_minimum_size = Vector2(288, 216)
layout_mode = 2
size_flags_horizontal = 10
[node name="SubViewportContainer" type="SubViewportContainer" parent="HBoxContainer/MainView"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="SubViewport" type="SubViewport" parent="HBoxContainer/MainView/SubViewportContainer"]
handle_input_locally = false
audio_listener_enable_3d = true
size = Vector2i(288, 216)
render_target_update_mode = 4