示例#1
0
        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;
        }
示例#2
0
        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);
                }
            }
        }