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); }
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); } }