/// <summary> /// 获取受到影响下一级高级相领扇区 /// </summary> /// <param name="list"></param> /// <param name="curLev"></param> /// <param name="LevelNum"></param> /// <returns></returns> public List <NeighbourSector> GetParentNeighbourSectorList(List <NeighbourSector> list, int curLev) { // 列表为空或已经是最大等级了 if (list == null || list.Count == 0 || curLev >= SectorLevelNum - 1) { return(null); } List <NeighbourSector> l = new List <NeighbourSector>(); foreach (NeighbourSector mc in list) { if (mc.A != null && mc.B != null && mc.A.level == curLev && mc.B.level == curLev) { MapSector high1 = GetParentMapSector(mc.A); MapSector high2 = GetParentMapSector(mc.B); if (high1 != high2) { NeighbourSector next = new NeighbourSector(high1, high2, mc.side); if (l.Contains(next) == false) { l.Add(next); } } } } return(l); }
public override bool Equals(System.Object obj) { if (obj == null) { return(false); } NeighbourSector p = (NeighbourSector)obj; if ((System.Object)p == null) { return(false); } return((A == p.A) && (B == p.B) && (side == p.side)); }
/// <summary> /// 处理扇区边缘的tile /// </summary> /// <param name="ms">所在扇区</param> /// <param name="side">所在边</param> private static void ProcessSideTile(LowSector ms, Side side) { MapSector neighbourms = g_map.Findneighbour(ms, side); if (neighbourms != null) { if (g_map.SectorLevelNum > 1) { MapSector high1 = ms.GetParentMapSector(g_map); MapSector high2 = neighbourms.GetParentMapSector(g_map); // 还是高级扇区的边缘。 if (high1 != high2) { NeighbourSector nb = new NeighbourSector(); if (ms.ID < neighbourms.ID) { nb.side = side; nb.A = high1; nb.B = high2; } else { nb.side = Util.FlipDirection(side); nb.A = high2; nb.B = high1; } if (!g_sectorEdgeChangesHighLevel.Contains(nb)) { g_sectorEdgeChangesHighLevel.Add(nb); } } } // if (g_sectorEdgeChangesLowLevel.ContainsKey(neighbourms as LowSector)) { if (g_sectorEdgeChangesLowLevel[neighbourms as LowSector].Contains(Util.FlipDirection(side))) // other side already filled in { if (!g_sectorChanges.Contains(ms as LowSector)) // other sector exist and the side. add our sector for general change { g_sectorChanges.Add(ms as LowSector); } } else if (!g_sectorEdgeChangesLowLevel[ms as LowSector].Contains(side)) // other sector exist but not the side. add our sector for Edge change { g_sectorEdgeChangesLowLevel[ms as LowSector].Add(side); } } else// other sector not (yet? )added. add ourselves and other sector for genral change { if (!g_sectorChanges.Contains(neighbourms as LowSector)) { g_sectorChanges.Add(neighbourms as LowSector); } if (!g_sectorEdgeChangesLowLevel[ms].Contains(side)) { g_sectorEdgeChangesLowLevel[ms].Add(side); } } } else if (!g_sectorEdgeChangesLowLevel[ms as LowSector].Contains(side))// other sector does not exist, add ourselves { g_sectorEdgeChangesLowLevel[ms as LowSector].Add(side); } }