using System;
namespace BaseGames.AI
{
/// 标注一个 AiScript 对应的敌人类型 id,供 AiDefinitionRegistry 反射收集(第 3 阶段)。
[AttributeUsage(AttributeTargets.Class, Inherited = false)]
public sealed class AiDefinitionAttribute : Attribute
{
public string Id { get; }
public AiDefinitionAttribute(string id) => Id = id;
}
///
/// 一种敌人 AI 的声明基类(唯一事实来源)。子类实现 Build 用 fluent 描述状态机。
/// 构建结果 AiGraph 每类型只建一次、实例共享(flyweight)。
///
public abstract class AiScript : IAiDefinition
{
AiGraph _cached;
/// 惰性构建并缓存共享 AiGraph。
public AiGraph GetOrBuildGraph()
{
if (_cached == null)
{
var b = new BrainBuilder();
Build(b);
_cached = b.Build();
}
return _cached;
}
protected abstract void Build(BrainBuilder b);
}
}