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