mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-23 03:04:29 +08:00
- 新增架构层支持,包括AbstractArchitecture和ArchitectureAnchorNode - 实现拖拽功能组件AbstractDragDrop2DComponentBase和AbstractDragDropArea2DComponent - 添加节点扩展方法类NodeExtensions,提供多种实用的节点操作方法 - 新增资源目录系统AbstractAssetCatalogSystem用于管理游戏资源 - 实现音频管理系统AbstractAudioManagerSystem支持背景音乐和音效播放 - 添加取消注册扩展方法UnRegisterExtension - 创建GFramework.Game项目模块 - 重构项目结构,聚合核心模块并优化依赖引用 - [no tag]
63 lines
1.9 KiB
C#
63 lines
1.9 KiB
C#
using GFramework.Core.architecture;
|
||
using Godot;
|
||
|
||
namespace GFramework.Godot.architecture;
|
||
|
||
/// <summary>
|
||
/// 抽象架构类,为特定类型的架构提供基础实现框架
|
||
/// </summary>
|
||
/// <typeparam name="T">架构的具体类型,必须继承自Architecture且能被实例化</typeparam>
|
||
public abstract class AbstractArchitecture<T> : Architecture<T> where T : Architecture<T>, new()
|
||
{
|
||
private const string ArchitectureName = "__GFrameworkArchitectureAnchor";
|
||
/// <summary>
|
||
/// 初始化架构,按顺序注册模型、系统和工具
|
||
/// </summary>
|
||
protected override void Init()
|
||
{
|
||
RegisterModels();
|
||
RegisterSystems();
|
||
RegisterUtilities();
|
||
AttachToGodotLifecycle();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 将架构绑定到Godot生命周期中,确保在场景树销毁时能够正确清理资源
|
||
/// 通过创建一个锚节点来监听场景树的销毁事件
|
||
/// </summary>
|
||
private void AttachToGodotLifecycle()
|
||
{
|
||
if (Engine.GetMainLoop() is not SceneTree tree)
|
||
return;
|
||
|
||
// 防止重复挂载(热重载 / 多次 Init)
|
||
if (tree.Root.GetNodeOrNull(ArchitectureName) != null)
|
||
return;
|
||
|
||
var anchor = new ArchitectureAnchorNode
|
||
{
|
||
Name = ArchitectureName
|
||
};
|
||
|
||
anchor.Bind(Destroy);
|
||
|
||
tree.Root.CallDeferred(Node.MethodName.AddChild, anchor);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 注册工具抽象方法,由子类实现具体的工具注册逻辑
|
||
/// </summary>
|
||
protected abstract void RegisterUtilities();
|
||
|
||
/// <summary>
|
||
/// 注册系统抽象方法,由子类实现具体系统注册逻辑
|
||
/// </summary>
|
||
protected abstract void RegisterSystems();
|
||
|
||
/// <summary>
|
||
/// 注册模型抽象方法,由子类实现具体模型注册逻辑
|
||
/// </summary>
|
||
protected abstract void RegisterModels();
|
||
}
|
||
|