DiscipleManager 与 TimeSystem 随 MainGame 场景挂载,打通弟子增删信号到 UI

生命周期重构:
- TimeSystem 退出 Autoload,改挂 MainGame.tscn 子节点,补 class_name;
  HUD 对时间系统的引用由全局名改为 %TimeSystem(unique_name_in_owner)
- DiscipleManager 挂 MainGame.tscn(原无效 Autoload 注册已删),
  进游戏随场景创建、返回主菜单随树销毁,杜绝弟子数据跨轮回残留

信号闭环:
- 场景连接 disciple_added / disciple_removed 到 MainGame 回调,
  回调转调 Manager.add_disciple_card / remove_disciple_card(卡按 id 同步增删)
- MainGame._ready 按 NEW_GAME 触发 spawn_initial_roster(),
  父节点 _ready 时序最晚,保证卡片连接先于首批信号就绪
- 恢复误删的 sign_return_mainmenu 场景连接(返回主菜单建组存档链路)

注意:MainGame._process 内含临时删除测试(1000 帧后删 id=2 弟子),
演示移除链路用,后续版本应移除
This commit is contained in:
2026-09-10 00:27:54 +08:00
parent c1fb348f07
commit ae605c5e48
5 changed files with 42 additions and 6 deletions
-1
View File
@@ -18,7 +18,6 @@ config/icon="res://icon.svg"
[autoload]
GameState="*res://src/Core/GameState.gd"
TimeSystem="*res://src/Core/TimeSystem.gd"
Settings="*res://src/Core/Settings.gd"
SaveSystem="*res://src/Core/SaveSystem.gd"
+22
View File
@@ -1,5 +1,17 @@
extends Node
var cnt := 0;
func _ready() -> void:
%DiscipleManager.spawn_initial_roster()
pass
func _process(delta: float) -> void:
if cnt >= 1000:
var d : Disciple= %DiscipleManager.get_disciple(2);
%DiscipleManager.remove_disciple(d);
else:
cnt = cnt + 1;
pass
func _on_top_bar_hud_sign_return_mainmenu() -> void:
if GameState.mode == GameState.GameMode.NEW_GAME:
@@ -8,3 +20,13 @@ func _on_top_bar_hud_sign_return_mainmenu() -> void:
SaveSystem.save(GameState.profile_id) # 进游戏立即存首档,防开局就丢
get_tree().change_scene_to_file("res://src/UI/Panels/MainMenu/MainMenu.tscn")
pass # Replace with function body.
func _on_disciple_manager_disciple_added(disciple: Disciple) -> void:
$PanelContainer/Manager.add_disciple_card(disciple)
pass # Replace with function body.
func _on_disciple_manager_disciple_removed(disciple: Disciple) -> void:
$PanelContainer/Manager.remove_disciple_card(disciple.id)
pass # Replace with function body.
+16 -2
View File
@@ -1,12 +1,14 @@
[gd_scene format=3 uid="uid://c1exffg84ojqx"]
[ext_resource type="Script" uid="uid://cr4by5k8vgkcq" path="res://src/Core/MainGame.gd" id="1_8bu23"]
[ext_resource type="Script" uid="uid://cr4by5k8vgkcq" path="res://src/Core/MainGame.gd" id="1_2atgf"]
[ext_resource type="Script" uid="uid://bstiea1nx61b8" path="res://src/Character/DiscipleManager.gd" id="1_dl5bp"]
[ext_resource type="PackedScene" uid="uid://d3njijtx7ws1m" path="res://src/UI/HUD/MainSceneHud.tscn" id="2_8bu23"]
[ext_resource type="StyleBox" uid="uid://e86yw57h4v2s" path="res://resources/manager_style_box_flat.tres" id="3_dl5bp"]
[ext_resource type="PackedScene" uid="uid://d1mbwdtarjqof" path="res://src/UI/Panels/Manager/Manager.tscn" id="4_58g0x"]
[ext_resource type="Script" uid="uid://b8f8t2phmhq2e" path="res://src/Core/TimeSystem.gd" id="5_58g0x"]
[node name="MainGame" type="Node" unique_id=42551660]
script = ExtResource("1_8bu23")
script = ExtResource("1_2atgf")
[node name="MainHud" parent="." unique_id=836125968 instance=ExtResource("2_8bu23")]
size_flags_horizontal = 3
@@ -23,4 +25,16 @@ theme_override_styles/panel = ExtResource("3_dl5bp")
[node name="Manager" parent="PanelContainer" unique_id=360636457 instance=ExtResource("4_58g0x")]
layout_mode = 2
[node name="DiscipleManager" type="Node" parent="." unique_id=1485476702]
unique_name_in_owner = true
script = ExtResource("1_dl5bp")
metadata/_custom_type_script = "uid://bstiea1nx61b8"
[node name="TimeSystem" type="Node" parent="." unique_id=1280036358]
unique_name_in_owner = true
script = ExtResource("5_58g0x")
metadata/_custom_type_script = "uid://b8f8t2phmhq2e"
[connection signal="disciple_added" from="DiscipleManager" to="." method="_on_disciple_manager_disciple_added"]
[connection signal="disciple_removed" from="DiscipleManager" to="." method="_on_disciple_manager_disciple_removed"]
[connection signal="sign_return_mainmenu" from="MainHud" to="." method="_on_top_bar_hud_sign_return_mainmenu"]
+1
View File
@@ -1,6 +1,7 @@
## 全局时间系统(Autoload 单例)。
## 负责游戏时间的推进与播报,仅在世界场景中运行。
## 历法:12 月 × 30 日 = 360 日/年。
class_name TimeSystem
extends Node
const MONTHS_PER_YEAR := 12
+3 -3
View File
@@ -6,8 +6,8 @@ extends Control
signal sign_return_mainmenu
func _ready() -> void:
time_label.text = TimeSystem.get_date_text()
TimeSystem.month_passed.connect(_on_TimeMonthPassed)
time_label.text = %TimeSystem.get_date_text()
%TimeSystem.month_passed.connect(_on_TimeMonthPassed)
pass
func _on_ButtonEsc_ButtonUp() -> void:
@@ -20,5 +20,5 @@ func _on_TimeMonthPassed(_year: int, _month: int) -> void:
func _on_button_continue_button_up() -> void:
TimeSystem.advance_month()
%TimeSystem.advance_month()
pass # Replace with function body.