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]); } } } }
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]); } } } }