Exemplo n.º 1
0
        public IBlockData?SetBlock(ushort location, ushort blockId, IBlockDataPoolingRegistry dataPoolingRegistry)
        {
            var previousID   = _blockIds[location];
            var isKeyPresent = _blockData.TryGetValue(location, out var value);

            if (isKeyPresent)
            {
                dataPoolingRegistry.Return(previousID, value);
            }

            _blockIds[location] = blockId;

            var newData = dataPoolingRegistry.GetById(blockId);

            if (newData == null)
            {
                return(null);
            }

            if (isKeyPresent)
            {
                _blockData[location] = newData;
            }
            else
            {
                _blockData.Add(location, newData);
            }

            return(newData);
        }
Exemplo n.º 2
0
        public void ClearChunk(IBlockDataPoolingRegistry blockDataPoolingRegistry, bool overrideIds = false)
        {
            if (overrideIds)
            {
                for (int i = 0; i < ChunkSize3D; i++)
                {
                    _blockIds[i] = 0;
                }
            }

            foreach (var pair in _blockData)
            {
                var addressIndex  = pair.Key;
                var data          = pair.Value;
                var registryIndex = _blockIds[addressIndex];

                blockDataPoolingRegistry.Return(registryIndex, data);
            }
        }
Exemplo n.º 3
0
        public void Deserialize(IByteReader buffer, IBlockDataPoolingRegistry blockDataPoolingRegistry)
        {
            ClearChunk(blockDataPoolingRegistry);

            for (var i = 0; i < ChunkSize3D; i++)
            {
                _blockIds[i] = buffer.ReadUInt16();
            }

            int count = buffer.ReadUInt16();

            for (var i = 0; i < count; i++)
            {
                var addressIndex  = buffer.ReadUInt16();
                var registryIndex = _blockIds[addressIndex];

                var data = blockDataPoolingRegistry.GetById(registryIndex);
                data.Deserialize(buffer);

                _blockData.Add(addressIndex, data);
            }
        }