57 lines
2.2 KiB
C#
57 lines
2.2 KiB
C#
using System;
|
||
using UnityEngine;
|
||
|
||
namespace BaseGames.Enemies
|
||
{
|
||
/// <summary>
|
||
/// 连接段类型:需要"特殊动作"才能通过的一段地形(跳过缺口、下落、爬梯、传送等)。
|
||
///
|
||
/// <para>项目已移除第三方寻路库,导航不再自动规划跨平台路径;本枚举与
|
||
/// <see cref="INavLinkHandler"/> 保留,用于**由能力驱动**的地形穿越
|
||
/// (例如"跳扑到另一个平台"这类招式),由 AI 决策何时使用。</para>
|
||
/// </summary>
|
||
public enum NavLinkType
|
||
{
|
||
None,
|
||
Segment, // 普通地面/平台段
|
||
Jump,
|
||
Fall,
|
||
Corner,
|
||
Climb,
|
||
Elevator,
|
||
Teleport,
|
||
Custom
|
||
}
|
||
|
||
/// <summary>
|
||
/// 连接段穿越能力接口。
|
||
///
|
||
/// 实现此接口的组件(<c>EnemyAbilityBase</c> 子类 / <c>EnemyMovement</c> 等)负责某类
|
||
/// <see cref="NavLinkType"/> 的穿越逻辑:动画播放、物理推进、时序控制全部封装在实现内部。
|
||
///
|
||
/// <para>移除寻路库后,穿越不再由寻路路径自动触发,而是由 AI/能力显式发起:
|
||
/// 导航器报告"够不着"(<see cref="IEnemyNavigator.IsBlocked"/>),AI 据此决定是否使用
|
||
/// 跳扑等能力跨越地形。</para>
|
||
/// </summary>
|
||
public interface INavLinkHandler
|
||
{
|
||
/// <summary>该处理器负责的所有连接段类型(允许一个组件处理多种类型)。</summary>
|
||
NavLinkType[] HandledLinkTypes { get; }
|
||
|
||
/// <summary>运行时可行性检查:能否穿越此具体连接段(距离/高度/当前状态等)。</summary>
|
||
bool CanHandleLink(NavLinkType type, Vector2 linkStart, Vector2 linkEnd);
|
||
|
||
/// <summary>
|
||
/// 开始穿越。实现自行驱动动画 + 物理。
|
||
/// <b>onComplete 必须且只能调用一次</b>。
|
||
/// </summary>
|
||
void BeginLinkTraversal(NavLinkType type, Vector2 linkStart, Vector2 linkEnd, Action onComplete);
|
||
|
||
/// <summary>
|
||
/// 强制中断穿越(敌人死亡 / 被击飞 / 场景切换时调用)。
|
||
/// 调用后不得再调用 onComplete。
|
||
/// </summary>
|
||
void AbortLinkTraversal();
|
||
}
|
||
}
|