feat(ai): BrainGraph 能力接口(ISensor/IMover/ICombatant/IActorVitals)+IAiContext
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
namespace BaseGames.AI
|
||||
{
|
||||
/// <summary>生命体征/受控状态接口(第 3 阶段由 VitalsAdapter 适配敌人状态)。</summary>
|
||||
public interface IActorVitals
|
||||
{
|
||||
bool IsAlive { get; }
|
||||
/// <summary>物理态是否为 Controlled——决策层仅在此为真时推进(IsControllable 让位门)。</summary>
|
||||
bool IsControllable { get; }
|
||||
float HpPercent { get; }
|
||||
bool HpBelow(float ratio);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9add25f798610d346ad9d65d50775eb4
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,15 @@
|
||||
namespace BaseGames.AI
|
||||
{
|
||||
/// <summary>
|
||||
/// 传给所有状态回调 / 转换条件的上下文。声明层的 lambda 只能通过它访问实例,
|
||||
/// 不得闭包捕获具体敌人——这是 lambda 挂在共享 AiGraph 上的前提。
|
||||
/// </summary>
|
||||
public interface IAiContext
|
||||
{
|
||||
ISensor Sensor { get; }
|
||||
IMover Mover { get; }
|
||||
ICombatant Combat { get; }
|
||||
IActorVitals Vitals { get; }
|
||||
Blackboard Blackboard { get; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b8fe3f9806c1f644ea3da6d244181b98
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,11 @@
|
||||
namespace BaseGames.AI
|
||||
{
|
||||
/// <summary>战斗/能力调度接口(第 3 阶段由 CombatantAdapter 适配能力注册表)。</summary>
|
||||
public interface ICombatant
|
||||
{
|
||||
bool UseAbility(string abilityId);
|
||||
bool IsAbilityRunning(string abilityId = null); // null = 任意能力
|
||||
bool NoAbilityRunning { get; }
|
||||
bool CanUseAbility(string abilityId);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b61b9cf2b94d7ab4c8e16be8cfc19e8d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,14 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace BaseGames.AI
|
||||
{
|
||||
/// <summary>移动能力接口(第 3 阶段由 MoverAdapter 适配移动系统)。</summary>
|
||||
public interface IMover
|
||||
{
|
||||
void MoveTo(Vector2 target);
|
||||
void FacePlayer();
|
||||
void Stop();
|
||||
void WalkRandom();
|
||||
void LookAround();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bfa62d8e02c8fa644b4c18929b82cbcb
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,13 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace BaseGames.AI
|
||||
{
|
||||
/// <summary>感知能力接口(第 3 阶段由 SensorAdapter 适配感知系统)。</summary>
|
||||
public interface ISensor
|
||||
{
|
||||
bool SeesPlayer();
|
||||
bool InRange(float range); // 内部用平方距离比较
|
||||
bool LostFor(float seconds); // 丢失玩家已持续 seconds
|
||||
Vector2 LastKnown { get; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1e1f4a0222db1794ca4f8ef54b5db3b6
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user