public void Iterate_Over_KeysWithRefs() { var count = 10; var dictionary = GetDictionary(); var sw = Stopwatch.StartNew(); for (var i = 0; i < count; i++) { foreach (var key in dictionary.Keys) { var position = VoxelUtility.GetPositionByHash(key); var index = VoxelUtility.GetVoxelIndex(position, _voxelsSize); ref var voxel = ref _voxels[index]; var color = voxel.colorIndex; voxel.data = 0; voxel.colorIndex = 0; } }
public static VoxelModel ToModel(this MagicaFile magicaFile, Vector3Int volumeSize) { var magicaChunks = magicaFile.Chunks; var volume = new VoxelModel(volumeSize, magicaFile.Palette); var minPosition = new Vector3Int(int.MaxValue, int.MaxValue, int.MaxValue); var maxPosition = new Vector3Int(int.MinValue, int.MinValue, int.MinValue); var magicaSize = new Vector3(); for (var chunkIndex = 0; chunkIndex < magicaChunks.Length; chunkIndex++) { var magicaChunk = magicaChunks[chunkIndex]; var defaultPosition = magicaChunk.position; var chunkSize = magicaChunk.size; var chunkPosition = defaultPosition - chunkSize / 2; magicaChunk.position = chunkPosition; for (var i = 0; i < 3; i++) { if (chunkPosition[i] < minPosition[i]) { minPosition[i] = chunkPosition[i]; } } for (var i = 0; i < 3; i++) { if (chunkPosition[i] + chunkSize[i] > maxPosition[i]) { maxPosition[i] = chunkPosition[i] + chunkSize[i]; } } for (var i = 0; i < 3; i++) { magicaSize[i] = maxPosition[i] - minPosition[i]; } magicaChunks[chunkIndex] = magicaChunk; } foreach (var chunk in magicaChunks) { var voxels = chunk.voxels; var chunkPosition = new Vector3Int(chunk.position.x, chunk.position.y, chunk.position.z); var positionAdjustment = chunkPosition - minPosition; var rotation = chunk.rotation; var size = chunk.size; foreach (var magicaVoxel in voxels) { var voxelPosition = new Vector3Int(magicaVoxel.x, magicaVoxel.y, magicaVoxel.z); for (var i = 0; i < 3; i++) { var multiplier = rotation[i]; if (multiplier != 1) { var value = voxelPosition[i] * multiplier; voxelPosition[i] = size[i] + value - 1; } } var position = voxelPosition + positionAdjustment; var index = VoxelUtility.GetVoxelIndex(position, volumeSize); var voxel = new VoxelEntity { colorIndex = magicaVoxel.colorIndex, data = 100 }; volume.SetVoxel(index, voxel); } } return(volume); }