Ejemplo n.º 1
0
    /// <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);
    }
Ejemplo n.º 2
0
    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));
    }
Ejemplo n.º 3
0
    /// <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);
        }
    }