using System;
using System.Collections.Generic;
using UnityEngine;
namespace FL.Battle
{
///
/// 目标查找方式
///
public enum ETargetFindType
{
///
/// 找最近的
/// 过滤移动和受保护的
///
Nearest = 0,
///
/// 找最近的
/// 只过滤死亡,其他状态都可选
///
NearestAlive,
///
/// 找范围内的
/// 过滤移动和受保护的
///
InRange,
///
/// 找范围内的
/// 只过滤死亡,其他状态都可选
///
InRangeAlive,
}
public struct FinderInfo
{
public long uid;
///
/// 世界坐标
///
public Vector3 position;
///
/// 半径
///
public float radius;
}
///
/// 目标选择器
///
public interface ITargetSelector
{
ITarget GetTarget(long entityId);
ITarget GetPlayer();
///
/// 同步查找目标
///
///
///
///
/// 自定义过滤器,不能选择时返回true
///
ITarget FindSync(ITarget finder, EEntityType targetType, ETargetFindType findType = ETargetFindType.Nearest, Func customFilter = null);
///
/// 同步查找目标
///
///
///
///
/// 自定义过滤器,不能选择时返回true
///
ITarget FindSync(FinderInfo finder, EEntityType targetType, ETargetFindType findType = ETargetFindType.Nearest, Func customFilter = null);
///
/// 查找范围内所有目标
/// ETargetFindType.Nearest和NearestAlive无效
///
///
///
///
///
///
///
bool FindTargets(FinderInfo finder, EEntityType targetType, ETargetFindType findType, Func customFilter, ref List targets);
///
/// 查找范围内所有目标
/// ETargetFindType.Nearest和NearestAlive无效
///
///
///
///
///
///
///
bool FindTargets(Rect rect, EEntityType targetType, ETargetFindType findType, Func customFilter, ref List targets);
///
/// 异步查找目标
///
///
///
///
///
void FindAsync(ITarget finder, EEntityType targetType, ETargetFindType findType, Action onSelected);
///
/// 随机一个目标类型的坐标
///
///
/// 是否要靠近目标类型
/// 自定义过滤器,不能选择时返回true
///
Vector3 RandomPosition(EEntityType targetType, bool isCloseToTarget, Func customFilter = null);
}
}