godot-plateformer/addons/reedscene/scene/SceneManager.gd

69 lines
1.6 KiB
GDScript

class_name SceneManager
extends Node
## ==============================
## References
## ==============================
var _scene: ReedScene
var _act_manager: ActManager
var _props: Dictionary # prop_id -> PropComponent
## ==============================
## Lifecycle
## ==============================
func _ready() -> void:
await get_parent().ready
_resolve_scene()
if _scene == null:
push_error("[SceneManager] Parent is not ReedScene.")
return
_resolve_references()
_bind_signals()
## ==============================
## Resolve References
## ==============================
func _resolve_scene() -> void:
var p := get_parent()
if p is ReedScene:
_scene = p
else:
_scene = null
func _resolve_references() -> void:
# 从 ReedScene 拿“整理好的结果”
_act_manager = _scene._act_manager
_props = _scene._prop_map
## ==============================
## Signal Binding
## ==============================
func _bind_signals() -> void:
if _act_manager:
_act_manager.act_changed.connect(_on_act_changed)
#for prop_id in _props:
#var prop : PropComponent = _props[prop_id]
#_bind_prop_signals(prop)
#
#func _bind_prop_signals(prop: PropComponent) -> void:
## 示例:监听 prop 的自定义信号
#if prop.has_signal("activated"):
#prop.activated.connect(func():
#_on_prop_activated(prop)
#)
## ==============================
## Callbacks
## ==============================
func _on_act_changed(from_act: int, to_act: int) -> void:
print("[SceneManager] Act changed:", from_act, "->", to_act)
func _on_prop_activated(prop: PropComponent) -> void:
print("[SceneManager] Prop activated:", prop.prop_id)