From 396cc589bc49b3850d5cbbb921e89faf3a7f8c1a Mon Sep 17 00:00:00 2001 From: GeWuYou <95328647+GeWuYou@users.noreply.github.com> Date: Wed, 17 Dec 2025 13:00:33 +0800 Subject: [PATCH] =?UTF-8?q?feat(core):=20=E5=AE=9E=E7=8E=B0=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E9=94=80=E6=AF=81=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 AbstractSystem 中添加 OnDestroy 抽象方法和 ISystem.Destroy 接口实现 - 在 Architecture 中增加 Destroy 方法以统一销毁所有已注册系统 - 更新 ISystem 接口注释及功能描述,明确支持系统销毁能力 - 修正 OnRegisterPatch 调用方式,确保架构注册补丁逻辑正确执行 - 完善 AbstractAudioManagerSystem 中的 OnDestroy 方法重写逻辑 - [no tag] --- .../system/AbstractAudioManagerSystem.cs | 2 +- GFramework.Core/architecture/Architecture.cs | 15 ++++++++++++++- GFramework.Core/system/AbstractSystem.cs | 15 ++++++++++++++- GFramework.Core/system/ISystem.cs | 10 ++++++++-- 4 files changed, 37 insertions(+), 5 deletions(-) diff --git a/GFramework.Core.Godot/system/AbstractAudioManagerSystem.cs b/GFramework.Core.Godot/system/AbstractAudioManagerSystem.cs index 87181fc..0df032f 100644 --- a/GFramework.Core.Godot/system/AbstractAudioManagerSystem.cs +++ b/GFramework.Core.Godot/system/AbstractAudioManagerSystem.cs @@ -419,7 +419,7 @@ public abstract class AbstractAudioManagerSystem : AbstractSystem, IAudioManager /// /// 系统销毁时清理资源 /// - protected void OnDestroy() + protected override void OnDestroy() { // 停止并清理淡入淡出动画 MusicFadeTween?.Kill(); diff --git a/GFramework.Core/architecture/Architecture.cs b/GFramework.Core/architecture/Architecture.cs index 2d06bd4..aebbf70 100644 --- a/GFramework.Core/architecture/Architecture.cs +++ b/GFramework.Core/architecture/Architecture.cs @@ -35,7 +35,7 @@ public abstract class Architecture : IArchitecture where T : Architecture, arch.Init(); // 执行注册的补丁逻辑 - OnRegisterPatch?.Invoke(arch); + OnRegisterPatch(arch); // 初始化所有已注册但尚未初始化的模型 foreach (var model in arch._mModels) model.Init(); @@ -236,6 +236,19 @@ public abstract class Architecture : IArchitecture where T : Architecture, _mTypeEventSystem.UnRegister(onEvent); } + /// + /// 销毁架构,同时销毁所有已注册的系统 + /// + public void Destroy() + { + // 销毁所有已注册的系统 + foreach (var system in _mSystems) + { + system.Destroy(); + } + _mSystems.Clear(); + } + /// /// 抽象初始化方法,由子类重写以进行自定义初始化操作 diff --git a/GFramework.Core/system/AbstractSystem.cs b/GFramework.Core/system/AbstractSystem.cs index 927c34a..1490b64 100644 --- a/GFramework.Core/system/AbstractSystem.cs +++ b/GFramework.Core/system/AbstractSystem.cs @@ -5,7 +5,7 @@ namespace GFramework.Core.system; /// /// 抽象系统基类,实现系统接口的基本功能 -/// 提供架构关联和初始化机制 +/// 提供架构关联、初始化和销毁机制 /// public abstract class AbstractSystem : ISystem { @@ -37,8 +37,21 @@ public abstract class AbstractSystem : ISystem OnInit(); } + /// + /// 系统销毁方法,调用抽象销毁方法 + /// + void ISystem.Destroy() + { + OnDestroy(); + } + /// /// 抽象初始化方法,由子类实现具体的初始化逻辑 /// protected abstract void OnInit(); + + /// + /// 抽象销毁方法,由子类实现具体的资源清理逻辑 + /// + protected virtual void OnDestroy() { } } \ No newline at end of file diff --git a/GFramework.Core/system/ISystem.cs b/GFramework.Core/system/ISystem.cs index 4f5bef4..c8c031f 100644 --- a/GFramework.Core/system/ISystem.cs +++ b/GFramework.Core/system/ISystem.cs @@ -1,4 +1,4 @@ -using GFramework.Core.events; +using GFramework.Core.events; using GFramework.Core.model; using GFramework.Core.rule; using GFramework.Core.utility; @@ -7,7 +7,7 @@ namespace GFramework.Core.system; /// /// 系统接口,定义了系统的基本行为和功能 -/// 该接口继承了多个框架相关的接口,提供了系统初始化能力 +/// 该接口继承了多个框架相关的接口,提供了系统初始化和销毁能力 /// public interface ISystem : ICanSetArchitecture, ICanGetModel, ICanGetUtility, ICanRegisterEvent, ICanSendEvent, ICanGetSystem @@ -17,4 +17,10 @@ public interface ISystem : ICanSetArchitecture, ICanGetModel, ICanGetUtility, /// 在系统被创建后调用,用于执行系统的初始化逻辑 /// void Init(); + + /// + /// 销毁系统 + /// 在系统被销毁前调用,用于执行系统的资源清理逻辑 + /// + void Destroy(); } \ No newline at end of file