Esempio n. 1
0
        public DesignImageMaker(HouseDesign design, int MaxZ)
        {
            int   count = design.FileHeader.RecordCount;
            Point point;

            m_Max = point = Point.Empty;
            m_Min = point;

            int index = 0;

            MultiTileEntry2[] multiTileEntrys = new MultiTileEntry2[count];

            for (int i = 0; i < HouseDesign.Levels; ++i)
            {
                for (int x = 0; x < design.Width; ++x)
                {
                    for (int y = 0; y < design.Height; ++y)
                    {
                        ArrayList list = design.Components[x][y][i];

                        foreach (HouseComponent hc in list)
                        {
                            if (MaxZ > 0 && hc.Z >= MaxZ)
                            {
                                continue;
                            }

                            multiTileEntrys[index].m_ItemID  = (short)hc.Index;
                            multiTileEntrys[index].m_OffsetX = (short)x;
                            multiTileEntrys[index].m_OffsetY = (short)y;
                            multiTileEntrys[index].m_OffsetZ = (short)hc.Z;
                            multiTileEntrys[index].m_Flags   = 0;
                            MultiTileEntry2 multiTileEntry = multiTileEntrys[index];

                            if (multiTileEntry.m_OffsetX < m_Min.X)
                            {
                                m_Min.X = multiTileEntry.m_OffsetX;
                            }
                            if (multiTileEntry.m_OffsetY < m_Min.Y)
                            {
                                m_Min.Y = multiTileEntry.m_OffsetY;
                            }
                            if (multiTileEntry.m_OffsetX > m_Max.X)
                            {
                                m_Max.X = multiTileEntry.m_OffsetX;
                            }
                            if (multiTileEntry.m_OffsetY > m_Max.Y)
                            {
                                m_Max.Y = multiTileEntry.m_OffsetY;
                            }

                            index++;
                        }
                    }
                }
            }

            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;
            TileList[][] tileLists = new TileList[m_Width][];
            m_Tiles = new Tile[m_Width][][];

            for (int j1 = 0; j1 < m_Width; j1++)
            {
                tileLists[j1] = new TileList[m_Height];
                m_Tiles[j1]   = new Tile[m_Height][];
                for (int k1 = 0; k1 < m_Height; k1++)
                {
                    tileLists[j1][k1] = new TileList();
                }
            }

            for (int i2 = 0; i2 < (int)multiTileEntrys.Length; i2++)
            {
                int j2 = multiTileEntrys[i2].m_OffsetX + m_Center.X;
                int k2 = multiTileEntrys[i2].m_OffsetY + m_Center.Y;
                tileLists[j2][k2].Add((short)((multiTileEntrys[i2].m_ItemID & 16383) + 16384), (sbyte)multiTileEntrys[i2].m_OffsetZ);
            }

            for (int i3 = 0; i3 < m_Width; i3++)
            {
                for (int j3 = 0; j3 < m_Height; j3++)
                {
                    m_Tiles[i3][j3] = tileLists[i3][j3].ToArray();
                    if ((int)m_Tiles[i3][j3].Length > 1)
                    {
                        Array.Sort(m_Tiles[i3][j3]);
                    }
                }
            }
        }
Esempio n. 2
0
        public DesignImageMaker(BinaryReader reader, int count)
        {
            Point point;

            m_Max = point = Point.Empty;
            m_Min = point;
            MultiTileEntry2[] multiTileEntrys = new MultiTileEntry2[count];

            for (int i1 = 0; i1 < count; i1++)
            {
                multiTileEntrys[i1].m_ItemID  = reader.ReadInt16();
                multiTileEntrys[i1].m_OffsetX = reader.ReadInt16();
                multiTileEntrys[i1].m_OffsetY = reader.ReadInt16();
                multiTileEntrys[i1].m_OffsetZ = reader.ReadInt16();
                multiTileEntrys[i1].m_Flags   = reader.ReadInt32();
                MultiTileEntry2 multiTileEntry = multiTileEntrys[i1];

                if (multiTileEntry.m_OffsetX < m_Min.X)
                {
                    m_Min.X = multiTileEntry.m_OffsetX;
                }
                if (multiTileEntry.m_OffsetY < m_Min.Y)
                {
                    m_Min.Y = multiTileEntry.m_OffsetY;
                }
                if (multiTileEntry.m_OffsetX > m_Max.X)
                {
                    m_Max.X = multiTileEntry.m_OffsetX;
                }
                if (multiTileEntry.m_OffsetY > m_Max.Y)
                {
                    m_Max.Y = multiTileEntry.m_OffsetY;
                }
            }

            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;
            TileList[][] tileLists = new TileList[m_Width][];
            m_Tiles = new Tile[m_Width][][];

            for (int j1 = 0; j1 < m_Width; j1++)
            {
                tileLists[j1] = new TileList[m_Height];
                m_Tiles[j1]   = new Tile[m_Height][];
                for (int k1 = 0; k1 < m_Height; k1++)
                {
                    tileLists[j1][k1] = new TileList();
                }
            }

            for (int i2 = 0; i2 < (int)multiTileEntrys.Length; i2++)
            {
                int j2 = multiTileEntrys[i2].m_OffsetX + m_Center.X;
                int k2 = multiTileEntrys[i2].m_OffsetY + m_Center.Y;
                tileLists[j2][k2].Add((short)((multiTileEntrys[i2].m_ItemID & 16383) + 16384), (sbyte)multiTileEntrys[i2].m_OffsetZ);
            }

            for (int i3 = 0; i3 < m_Width; i3++)
            {
                for (int j3 = 0; j3 < m_Height; j3++)
                {
                    m_Tiles[i3][j3] = tileLists[i3][j3].ToArray();
                    if ((int)m_Tiles[i3][j3].Length > 1)
                    {
                        Array.Sort(m_Tiles[i3][j3]);
                    }
                }
            }
        }