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:
@@ -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"
|
||||
|
||||
|
||||
@@ -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
@@ -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,6 +1,7 @@
|
||||
## 全局时间系统(Autoload 单例)。
|
||||
## 负责游戏时间的推进与播报,仅在世界场景中运行。
|
||||
## 历法:12 月 × 30 日 = 360 日/年。
|
||||
class_name TimeSystem
|
||||
extends Node
|
||||
|
||||
const MONTHS_PER_YEAR := 12
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user