feat(enemy): 新增 IEnemyNavigator 瘦身导航接口(7 成员)与 NullEnemyNavigator
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace BaseGames.Enemies
|
||||
{
|
||||
/// <summary>
|
||||
/// 敌人导航抽象:把"去某个世界点"的请求翻译为具体移动方式(地面沿地形走 / 飞行直取),
|
||||
/// 并报告到达与受阻。
|
||||
///
|
||||
/// <para><b>不含任何路径图概念</b>——可达性由移动层的墙/悬崖夹紧天然决定:
|
||||
/// 走得过去就是可达,被夹停的地方就是边界。</para>
|
||||
///
|
||||
/// 实现:<c>GroundNavigator</c>(地面)、<c>FlyingNavigator</c>(飞行)、
|
||||
/// <see cref="NullEnemyNavigator"/>(无导航/测试)。
|
||||
/// </summary>
|
||||
public interface IEnemyNavigator
|
||||
{
|
||||
/// <summary>
|
||||
/// 请求朝世界坐标移动。目标被记录后由实现逐帧驱动,**重复传入同一目标是幂等的**
|
||||
/// (每帧调用或只在目标变化时调用皆可)。传入新目标会清除 <see cref="HasArrived"/> / <see cref="IsBlocked"/>。
|
||||
/// </summary>
|
||||
void MoveTowards(Vector2 target);
|
||||
|
||||
/// <summary>停止移动并清除当前目标。</summary>
|
||||
void Stop();
|
||||
|
||||
/// <summary>设置移动速度(巡逻走速 / 追击跑速)。传 0 表示使用移动层配置的默认步速。</summary>
|
||||
void SetSpeed(float speed);
|
||||
|
||||
/// <summary>当前是否正朝目标推进(有目标、未到达、未受阻)。</summary>
|
||||
bool IsMoving { get; }
|
||||
|
||||
/// <summary>是否已到达目标(进入停止距离内)。</summary>
|
||||
bool HasArrived { get; }
|
||||
|
||||
/// <summary>是否被地形挡住而无法继续靠近目标(墙 / 悬崖夹停 / 推进停滞)。</summary>
|
||||
bool IsBlocked { get; }
|
||||
|
||||
/// <summary>取一个可供游走的目标点。取不到时返回 false。</summary>
|
||||
bool TryPickWanderPoint(out Vector2 point);
|
||||
}
|
||||
|
||||
/// <summary>无导航单位 / 测试用空实现:不移动,不报告到达或受阻。</summary>
|
||||
public sealed class NullEnemyNavigator : IEnemyNavigator
|
||||
{
|
||||
public void MoveTowards(Vector2 _) { }
|
||||
public void Stop() { }
|
||||
public void SetSpeed(float _) { }
|
||||
public bool IsMoving => false;
|
||||
public bool HasArrived => false;
|
||||
public bool IsBlocked => false;
|
||||
public bool TryPickWanderPoint(out Vector2 point) { point = Vector2.zero; return false; }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user