From ae605c5e48c9ae9de2689964d921a613f552b7ed Mon Sep 17 00:00:00 2001 From: chen Date: Thu, 10 Sep 2026 00:27:54 +0800 Subject: [PATCH] =?UTF-8?q?DiscipleManager=20=E4=B8=8E=20TimeSystem=20?= =?UTF-8?q?=E9=9A=8F=20MainGame=20=E5=9C=BA=E6=99=AF=E6=8C=82=E8=BD=BD?= =?UTF-8?q?=EF=BC=8C=E6=89=93=E9=80=9A=E5=BC=9F=E5=AD=90=E5=A2=9E=E5=88=A0?= =?UTF-8?q?=E4=BF=A1=E5=8F=B7=E5=88=B0=20UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 生命周期重构: - 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 弟子), 演示移除链路用,后续版本应移除 --- project.godot | 1 - src/Core/MainGame.gd | 22 ++++++++++++++++++++++ src/Core/MainGame.tscn | 18 ++++++++++++++++-- src/Core/TimeSystem.gd | 1 + src/UI/HUD/MainSceneHud.gd | 6 +++--- 5 files changed, 42 insertions(+), 6 deletions(-) diff --git a/project.godot b/project.godot index 8fa90eb..192998b 100644 --- a/project.godot +++ b/project.godot @@ -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" diff --git a/src/Core/MainGame.gd b/src/Core/MainGame.gd index 99b2d39..1f5edaa 100644 --- a/src/Core/MainGame.gd +++ b/src/Core/MainGame.gd @@ -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. diff --git a/src/Core/MainGame.tscn b/src/Core/MainGame.tscn index ac9ad33..b17ba6e 100644 --- a/src/Core/MainGame.tscn +++ b/src/Core/MainGame.tscn @@ -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"] diff --git a/src/Core/TimeSystem.gd b/src/Core/TimeSystem.gd index 44a10d2..74e2a2a 100644 --- a/src/Core/TimeSystem.gd +++ b/src/Core/TimeSystem.gd @@ -1,6 +1,7 @@ ## 全局时间系统(Autoload 单例)。 ## 负责游戏时间的推进与播报,仅在世界场景中运行。 ## 历法:12 月 × 30 日 = 360 日/年。 +class_name TimeSystem extends Node const MONTHS_PER_YEAR := 12 diff --git a/src/UI/HUD/MainSceneHud.gd b/src/UI/HUD/MainSceneHud.gd index d64c4ee..be958d7 100644 --- a/src/UI/HUD/MainSceneHud.gd +++ b/src/UI/HUD/MainSceneHud.gd @@ -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.