public static void Save(BinaryWriter writer, BlockStore store) { writer.Write((byte)Version); writer.Write((Int32)store.TileSize); writer.Write((Int32)store.Tiles.Count); foreach (var tile in store.Tiles) { BinSpriteSerializer.Save(writer, tile); } writer.Write((Int32)store.Materials.Count); foreach (var kvp in store.Materials) { writer.Write((Int32)kvp.Key); writer.Write((Int32)kvp.Value.Count); foreach (var item in kvp.Value) { writer.Write((Int32)item); } } var flags = store.Flags.ToList(); writer.Write((Int32)flags.Count); foreach (var kvp in flags) { writer.Write((Int32)kvp.Key); writer.Write((Int32)kvp.Value); } }
public static BlockStore Load(BinaryReader reader) { var version = reader.ReadByte(); if (version != Version) { throw new InvalidOperationException("Invalid blockstore version"); } var tilesize = reader.ReadInt32(); var result = new BlockStore(tilesize); var numTiles = reader.ReadInt32(); while (numTiles-- > 0) { var sprite = BinSpriteSerializer.Load(reader); result.Tiles.Add(sprite); } var numMaterials = reader.ReadInt32(); while (numMaterials-- > 0) { var material = (MaterialType)reader.ReadInt32(); var numMaterialTiles = reader.ReadInt32(); while (numMaterialTiles-- > 0) { var id = reader.ReadInt32(); result.Materials[material].Add(id); } } var numFlags = reader.ReadInt32(); while (numFlags-- > 0) { var id = reader.ReadInt32(); var flags = (TileFlags)reader.ReadInt32(); result[id] = flags; } return(result); }