/// <summary> /// 满足地图空间条件判断 /// </summary> /// <param name="SearchStype">搜索类型</param> /// <param name="Target">按指定包含的类型进行搜索</param> /// <param name="l">按指定的阵营</param> /// <param name="Radius">半径</param> /// <returns>true 满足条件,false 不满足条件</returns> private static bool CheckMapConditions(MapSearchStlye SearchStype, MapGrid Self, Life Target, float Radius) { if (Target == null) { return(false); } if (SearchStype == MapSearchStlye.AllWorld) { return(true); } else if (SearchStype == MapSearchStlye.InBoat) { return(Target.InBoat); } else if (SearchStype == MapSearchStlye.SameLayer) { return(Life.InSameLayer(Self, Target)); } else if (SearchStype == MapSearchStlye.Circle) { return(Life.IsInCircle(Self, Target, Radius)); } else if (SearchStype == MapSearchStlye.Ball) { return(Life.IsInBall(Self, Target, Radius)); } else { return(false); } }
/// <summary> /// 按条件搜索lifeM /// </summary> /// <param name="HaveList">不为空,则在这个列表中进行搜索,为空在所有CM管理的列表中进行搜索</param> /// <param name="Type">lifem 类型,支持位组合</param> /// <param name="Camp">按指定的阵营,支持组合</param> /// <param name="TargetMg">格子的位置</param> /// <param name="Radius">搜索半径,圆形,球形需要</param> /// <returns>返回搜索列表list</returns> public static void SearchLifeMListByGrid(ref List <Life> list, List <Life> HaveList, LifeMType Type, LifeMCamp Camp, MapSearchStlye SearchStype, MapGrid TargetMg, float Radius) { if (list == null) { list = new List <Life> (); } else { list.Clear(); } //cm 中获取列表 if (HaveList == null || HaveList.Count == 0) { List <SceneSoldier> l = GetLifeMList(Type); if (l != null) { foreach (SceneSoldier s in l) { if (s == null) { continue; } LifeMCore Core = s.m_Core; Life life = s.m_Life; if (CheckCoreConditions(Core, Camp) == false) { continue; } if (CheckMapConditions(SearchStype, TargetMg, life, Radius) == false) { continue; } list.Add(life); } } } else //have list 中进行过滤 { foreach (Life life in HaveList) { if (life == null) { continue; } LifeMCore Core = life.m_Core; if (CheckCoreConditions(Core, Type, Camp) == false) { continue; } if (CheckMapConditions(SearchStype, TargetMg, life, Radius) == false) { continue; } list.Add(life); } } }