Files
zeling_v2/Assets/_Game/Scripts/AI/AiScript.cs
T

36 lines
1.1 KiB
C#

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