예제 #1
0
        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));
        }
예제 #2
0
        /// <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;
                    }
                }
            }
        }