Пример #1
0
        public Chunk(World world, ChunkPos chunkPos)
        {
            World = world;
            Pos   = chunkPos;

            _storageKey = StorageKey.Get("ChunkData", chunkPos);

            var saveFile   = world?.Universe?.SaveFile;
            var savedValue = saveFile?.ReadAsync(_storageKey)?.Result;

            if (savedValue != null)
            {
                var chunkData = savedValue.Deserialize <ChunkData>();
                if (chunkData != null)
                {
                    try
                    {
                        PasteChunkData(chunkData);
                    }
                    catch
                    {
                        _data       = null;
                        _isCreated  = false;
                        _chunkData  = null;
                        ContentHash = 0;
                    }
                }
            }

            _saveFile = saveFile;
        }
Пример #2
0
        public ushort this[BlockPos p]
        {
            get
            {
                if (p.Y < -200)
                {
                    return(1);
                }

                var chunk = PeekChunk((ChunkPos)p);
                if (chunk == null)
                {
                    return(0);
                }

                return(chunk[p.X & _chunkMask, p.Y & _chunkMask, p.Z & _chunkMask]);
            }

            set
            {
                var chunkPos = (ChunkPos)p;
                var chunk    = GetChunk(chunkPos);
                if (chunk.IsCreated)
                {
                    chunk[p.X & _chunkMask, p.Y & _chunkMask, p.Z & _chunkMask] = value;
                    Universe?.SaveFile?.Write(StorageKey.Get("ChunkData", chunkPos), StorageValue.Serialize(chunk.GetChunkData()));
                }
            }
        }
Пример #3
0
    public T Get <T>(string section, string key)
    {
        // TODO 2: Almacenamos una Key en el diccionario m_serialized
        Debug.Assert(m_serialized.ContainsKey(section), "La sección " + section + " no existe");
        StorageKey storageKey = m_serialized[section];

        Debug.Assert(storageKey.ContainsKey(key));
        return(storageKey.Get <T>(key));
    }
Пример #4
0
    public T Get <T>(string section, string key)
    {
        // TODO 2: Almacenamos una Key en el diccionario m_serialized
        Debug.Assert(m_serialized.ContainsKey(section), "Section " + section + "not exist");

        StorageKey sk = m_serialized[section];

        Debug.Assert(sk.ContainsKey(key), "The Key " + key + " in section " + section + " not exist");
        return(sk.Get <T>(key));
    }
Пример #5
0
        private async void LoadOrGenerate(Chunk chunk)
        {
            var          savedValueTask = Universe?.SaveFile?.ReadAsync(StorageKey.Get("ChunkData", chunk.Pos));
            StorageValue savedValue     = savedValueTask == null ? null : await savedValueTask;

            if (savedValue != null)
            {
                var chunkData = savedValue.Deserialize <ChunkData>();
                if (chunkData != null)
                {
                    chunk.PasteChunkData(savedValue.Deserialize <ChunkData>());
                }
            }
            else if (Generator != null)
            {
                Generator.CreateChunk(chunk);
            }
        }