public void GetChunkCoordinatesContainingPoint_Test4() { int3 worldPosition = new int3(5, 3, 16); int chunkSize = 16; IEnumerable <int3> coordinates = CoordinateUtilities.GetChunkCoordinatesContainingPoint(worldPosition, chunkSize); IEnumerable <int3> expectedCoordinates = new List <int3> { new int3(0, 0, 1), new int3(0, 0, 0), }; Assert.That(coordinates, Is.EquivalentTo(expectedCoordinates)); }
/// <summary> /// Set's the data value of the voxel data point at <paramref name="dataWorldPosition"/> to <paramref name="dataValue"/> /// </summary> /// <param name="dataWorldPosition">The world position of the data point</param> /// <param name="dataValue">The new data value of the data point</param> public void SetData(int3 dataWorldPosition, T dataValue) { int3[] affectedChunkCoordinates = CoordinateUtilities.GetChunkCoordinatesContainingPoint(dataWorldPosition, VoxelWorld.WorldSettings.ChunkSize); for (int i = 0; i < affectedChunkCoordinates.Length; i++) { int3 chunkCoordinate = affectedChunkCoordinates[i]; if (TryGetDataChunk(chunkCoordinate, out VoxelDataVolume <T> chunkData)) { int3 localPos = (dataWorldPosition - chunkCoordinate * VoxelWorld.WorldSettings.ChunkSize).Mod(VoxelWorld.WorldSettings.ChunkSize + 1); chunkData.SetVoxelData(dataValue, localPos); if (VoxelWorld.ChunkStore.TryGetDataChunk(chunkCoordinate, out ChunkProperties chunkProperties)) { chunkProperties.HasChanges = true; } } } }