public void Save() { if (!dirty) { return; } // Create the struct using (MemoryStream stream = new MemoryStream()) { using (BinaryWriter writer = new BinaryWriter(stream)) { writer.Write(SaveFileVersion()); writer.Write(Chunk.SIZE); BlockType currentType = BlockType.Air; ushort typeCount = 0; ChunkSubspacePosition position; for (position.x = 0; position.x < SIZE; position.x++) { for (position.y = 0; position.y < SIZE; position.y++) { for (position.z = 0; position.z < SIZE; position.z++) { Block block = GetBlock(position); if (currentType != block.GetBlockType()) { if (typeCount > 0) { writer.Write(typeCount); writer.Write((byte)currentType); typeCount = 0; } currentType = block.GetBlockType(); } typeCount++; } } } if (typeCount > 0) { writer.Write(typeCount); writer.Write((int)currentType); typeCount = 0; } // Save it QueuedFileSave.SaveFinishedCallback callback = new QueuedFileSave.SaveFinishedCallback(SaveCallback); QueuedFileChange change = new QueuedFileSave(FileID(), stream, callback, this); FileRepository.Push(change); } } dirty = false; }
public void Save() { using (MemoryStream stream = new MemoryStream()) { using (BinaryWriter writer = new BinaryWriter(stream)) { writer.Write(SaveFileVersion()); writer.Write(World.Instance().GetSeed()); QueuedFileSave.SaveFinishedCallback callback = new QueuedFileSave.SaveFinishedCallback(SaveCallback); QueuedFileChange change = new QueuedFileSave(FileID(), stream, callback, this); FileRepository.Push(change); } } }