69 lines
1.6 KiB
GDScript
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)
|