예제 #1
0
파일: Multis.cs 프로젝트: Brrm1/New-One
        private void ConvertList()
        {
            m_Center = new Point(-m_Min.X, -m_Min.Y);
            m_Width  = (m_Max.X - m_Min.X) + 1;
            m_Height = (m_Max.Y - m_Min.Y) + 1;

            var tiles = new MTileList[m_Width][];

            m_Tiles = new MTile[m_Width][][];

            for (int x = 0; x < m_Width; ++x)
            {
                tiles[x]   = new MTileList[m_Height];
                m_Tiles[x] = new MTile[m_Height][];

                for (int y = 0; y < m_Height; ++y)
                {
                    tiles[x][y] = new MTileList();
                }
            }

            for (int i = 0; i < m_SortedTiles.Length; ++i)
            {
                int xOffset = m_SortedTiles[i].m_OffsetX + m_Center.X;
                int yOffset = m_SortedTiles[i].m_OffsetY + m_Center.Y;

                tiles[xOffset][yOffset].Add(
                    (m_SortedTiles[i].m_ItemID),
                    (sbyte)m_SortedTiles[i].m_OffsetZ,
                    (sbyte)m_SortedTiles[i].m_Flags,
                    m_SortedTiles[i].m_Unk1);
            }

            m_Surface = 0;

            for (int x = 0; x < m_Width; ++x)
            {
                for (int y = 0; y < m_Height; ++y)
                {
                    m_Tiles[x][y] = tiles[x][y].ToArray();
                    for (int i = 0; i < m_Tiles[x][y].Length; ++i)
                    {
                        m_Tiles[x][y][i].Solver = i;
                    }
                    if (m_Tiles[x][y].Length > 1)
                    {
                        Array.Sort(m_Tiles[x][y]);
                    }
                    if (m_Tiles[x][y].Length > 0)
                    {
                        ++m_Surface;
                    }
                }
            }
        }
예제 #2
0
        public int CompareTo(object x)
        {
            if (x == null)
            {
                return(1);
            }

            if (!(x is MTile))
            {
                throw new ArgumentNullException();
            }

            MTile a = (MTile)x;

            ItemData ourData   = TileData.ItemTable[m_ID];
            ItemData theirData = TileData.ItemTable[a.ID];

            int ourTreshold = 0;

            if (ourData.Height > 0)
            {
                ++ourTreshold;
            }
            if (!ourData.Background)
            {
                ++ourTreshold;
            }
            int ourZ          = Z;
            int theirTreshold = 0;

            if (theirData.Height > 0)
            {
                ++theirTreshold;
            }
            if (!theirData.Background)
            {
                ++theirTreshold;
            }
            int theirZ = a.Z;

            ourZ   += ourTreshold;
            theirZ += theirTreshold;
            int res = ourZ - theirZ;

            if (res == 0)
            {
                res = ourTreshold - theirTreshold;
            }
            if (res == 0)
            {
                res = m_Solver - a.Solver;
            }
            return(res);
        }
예제 #3
0
        private void ConvertList()
        {
            _center = new Point(-_min.X, -_min.Y);
            Width   = (_max.X - _min.X) + 1;
            Height  = (_max.Y - _min.Y) + 1;

            var tiles = new MTileList[Width][];

            Tiles = new MTile[Width][][];

            for (int x = 0; x < Width; ++x)
            {
                tiles[x] = new MTileList[Height];
                Tiles[x] = new MTile[Height][];

                for (int y = 0; y < Height; ++y)
                {
                    tiles[x][y] = new MTileList();
                }
            }

            for (int i = 0; i < SortedTiles.Length; ++i)
            {
                int xOffset = SortedTiles[i].m_OffsetX + _center.X;
                int yOffset = SortedTiles[i].m_OffsetY + _center.Y;

                tiles[xOffset][yOffset].Add(SortedTiles[i].m_ItemID, (sbyte)SortedTiles[i].m_OffsetZ,
                                            (sbyte)SortedTiles[i].m_Flags, SortedTiles[i].m_Unk1);
            }

            Surface = 0;

            for (int x = 0; x < Width; ++x)
            {
                for (int y = 0; y < Height; ++y)
                {
                    Tiles[x][y] = tiles[x][y].ToArray();
                    for (int i = 0; i < Tiles[x][y].Length; ++i)
                    {
                        Tiles[x][y][i].Solver = i;
                    }

                    if (Tiles[x][y].Length > 1)
                    {
                        Array.Sort(Tiles[x][y]);
                    }

                    if (Tiles[x][y].Length > 0)
                    {
                        ++Surface;
                    }
                }
            }
        }
예제 #4
0
파일: TileList.cs 프로젝트: Xen85/ServUO
        public MTile[] ToArray()
        {
            var tiles = new MTile[Count];

            if (m_Tiles.Count > 0)
            {
                m_Tiles.CopyTo(tiles);
            }
            m_Tiles.Clear();

            return(tiles);
        }
예제 #5
0
 private MultiComponentList()
 {
     Tiles = new MTile[0][][];
 }
예제 #6
0
파일: TileList.cs 프로젝트: Xen85/ServUO
 public void Add(MTile mtle)
 {
     m_Tiles.Add(mtle);
 }
예제 #7
0
        private void ConvertList()
        {
            m_Center = new Point(-m_Min.X, -m_Min.Y);
            m_Width = (m_Max.X - m_Min.X) + 1;
            m_Height = (m_Max.Y - m_Min.Y) + 1;

            MTileList[][] tiles = new MTileList[m_Width][];
            m_Tiles = new MTile[m_Width][][];

            for (int x = 0; x < m_Width; ++x)
            {
                tiles[x] = new MTileList[m_Height];
                m_Tiles[x] = new MTile[m_Height][];

                for (int y = 0; y < m_Height; ++y)
                    tiles[x][y] = new MTileList();
            }

            for (int i = 0; i < m_SortedTiles.Length; ++i)
            {
                int xOffset = m_SortedTiles[i].m_OffsetX + m_Center.X;
                int yOffset = m_SortedTiles[i].m_OffsetY + m_Center.Y;

                tiles[xOffset][yOffset].Add((ushort)(m_SortedTiles[i].m_ItemID), (sbyte)m_SortedTiles[i].m_OffsetZ, (sbyte)m_SortedTiles[i].m_Flags, m_SortedTiles[i].m_Unk1);
            }

            m_Surface = 0;

            for (int x = 0; x < m_Width; ++x)
            {
                for (int y = 0; y < m_Height; ++y)
                {
                    m_Tiles[x][y] = tiles[x][y].ToArray();
                    for (int i = 0; i < m_Tiles[x][y].Length; ++i)
                        m_Tiles[x][y][i].Solver = i;
                    if (m_Tiles[x][y].Length > 1)
                        Array.Sort(m_Tiles[x][y]);
                    if (m_Tiles[x][y].Length > 0)
                        ++m_Surface;
                }
            }
        }
예제 #8
0
        public MTile[] ToArray()
        {
            MTile[] tiles = new MTile[Count];

            if (m_Tiles.Count > 0)
                m_Tiles.CopyTo(tiles);
            m_Tiles.Clear();

            return tiles;
        }
예제 #9
0
        public MTile[] ToArray()
        {
            var tiles = new MTile[Count];

            if (m_Tiles.Count > 0)
            {
                m_Tiles.CopyTo(tiles);
            }
            m_Tiles.Clear();

            return tiles;
        }