feat(ai): BrainGraph AiGraph + BrainBuilder(fluent, 显式标签, 目标校验)

This commit is contained in:
2026-07-03 14:04:51 +08:00
parent 3d6cef1f41
commit 6f9fa8c4b8
8 changed files with 301 additions and 0 deletions
+35
View File
@@ -0,0 +1,35 @@
using System;
namespace BaseGames.AI
{
/// <summary>标注一个 AiScript 对应的敌人类型 id,供 AiDefinitionRegistry 反射收集(第 3 阶段)。</summary>
[AttributeUsage(AttributeTargets.Class, Inherited = false)]
public sealed class AiDefinitionAttribute : Attribute
{
public string Id { get; }
public AiDefinitionAttribute(string id) => Id = id;
}
/// <summary>
/// 一种敌人 AI 的声明基类(唯一事实来源)。子类实现 Build 用 fluent 描述状态机。
/// 构建结果 AiGraph 每类型只建一次、实例共享(flyweight)。
/// </summary>
public abstract class AiScript
{
AiGraph _cached;
/// <summary>惰性构建并缓存共享 AiGraph。</summary>
public AiGraph GetOrBuildGraph()
{
if (_cached == null)
{
var b = new BrainBuilder();
Build(b);
_cached = b.Build();
}
return _cached;
}
protected abstract void Build(BrainBuilder b);
}
}