Пример #1
0
        public void Write()
        {
            //Write dbuffer
            SerializedDisplayBuffers.WriteBuffer(DBuffers, GetDBufferFullPath(ChunkPos));

            //Write meta data
            XMLOp.Serialize(metaData, GetMetaDataFullPath(ChunkPos));

            //Write chunk
            WriteUintsToFile(Voxels, FileFullPath);
        }
Пример #2
0
        public static SerializedChunk Read(IntVector3 chunkPos)
        {
            if (!File.Exists(GetFileFullPath(chunkPos)))
            {
                return(null);
            }
            try
            {
                MapDisplay.LODBuffers dbuffers = null;
                Chunk.MetaData        metaData = new Chunk.MetaData()
                {
                    Dirty = true
                };
                metaData = XMLOp.Deserialize <Chunk.MetaData>(GetMetaDataFullPath(chunkPos));

                try
                {
                    dbuffers = SerializedDisplayBuffers.ReadBufferAt(GetDBufferFullPath(chunkPos)); // SerializedDisplayBuffers.Deserialize(GetDBufferFullPath(chunkPos)).ToDisplayBuffers();
                } catch (Exception e)
                {
                    Debug.LogWarning("Excptn while reading dbuffers " + e.ToString());
                    return(null);
                }

                FileStream chunkFile = File.Open(GetFileFullPath(chunkPos), FileMode.Open);
                using (BinaryReader br = new BinaryReader(chunkFile))
                {
                    int    pos    = 0;
                    int    length = (int)br.BaseStream.Length;
                    uint[] voxels = new uint[length / VoxelStorageSize];
                    while (pos * VoxelStorageSize < length)
                    {
                        voxels[pos++] = br.ReadUInt32();
                    }

                    return(new SerializedChunk(chunkPos, dbuffers, voxels, metaData));
                }
            } catch (Exception e)
            {
                Debug.LogWarning("Excptn while reading: " + e.ToString());
                return(null);
            }
        }