void IDataFactoryWriter.SetMapBlock(byte mapindex, uint id, IMapBlockData tiles) { //container_Map[mapindex].Write(id, 0, (tiles as MapBlockData).LandHeader); var lands = tiles.Lands.Select(t => new LandMapTileData(t)).ToArray(); container_Map[mapindex].Write(id, 4, lands, 0, 64); var items = new ItemMapTileData[tiles.Items.Sum(t=>t.Length)]; for (int i = -1, c = 0; c < 64; ++c) for (int e = 0; e < tiles.Items[c].Length; ++e) items[++i] = new ItemMapTileData((byte)c, tiles.Items[c][e]); container_Sta[mapindex].Write(id, 0, items, 0, (uint)items.Length); }
public MapBlockData(LandMapTileData[] lands, ItemMapTileData[][] items) : this(0, lands, items) { }
IMapBlockData IDataFactoryReader.GetMapBlock(byte mapindex, uint id) { var lhead = container_Map[mapindex].Read<uint>(id, 0); var lands = container_Map[mapindex].Read<LandMapTileData>(id, 4, 64); var tiles = container_Sta[mapindex].ReadAll<ItemMapTileData>(id, 0); var items = new ItemMapTileData[64][]; if (tiles != null) { List<ItemMapTileData>[] tilelist = new List<ItemMapTileData>[64]; for (int i = 0; i < 64; ++i) tilelist[i] = new List<ItemMapTileData>(128); for (int i = 0; i < tiles.Length; ++i) tilelist[(tiles[i].YOffset << 3) + tiles[i].XOffset].Add(new ItemMapTileData(tiles[i].XOffset, tiles[i].YOffset, tiles[i])); for (int i = 0; i < 64; ++i) items[i] = tilelist[i].OrderBy(t => t.Altitude).ToArray(); } else { for (int i = 0; i < 64; ++i) items[i] = null; } return new MapBlockData(lhead, lands, items); }
public MapBlockData(uint header, LandMapTileData[] lands, ItemMapTileData[][] items) { _LandHeader = header; _Lands = new LandMapTile[64]; _Items = new ItemMapTile[64][]; for (int i = 0; i < 64; ++i) { _Lands[i] = new LandMapTile(lands[i].TileId, lands[i].Altitude); _Items[i] = new ItemMapTile[items[i].Length]; for (int k = 0; k < items[i].Length; ++k) _Items[i][k] = new ItemMapTile(items[i][k].TileId, items[i][k].Palette, items[i][k].Altitude); } }