feat(ai): BrainGraph AiGraph + BrainBuilder(fluent, 显式标签, 目标校验)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user