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 { 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); } }