void AddVoxel(Vector3Int gridPosition, float density) { Vector3Int chunkPosition = GridtoChunk(gridPosition); TerrainChunk terrainChunk = GetChunk(chunkPosition); if (terrainChunk == null) { GenerateChunk(chunkPosition); return; } terrainChunk.AddVoxel(gridPosition, density); TerrainChunk neighborChunk; if (Mod(gridPosition.x, cellSize.x) == 0) { neighborChunk = GetChunk(new Vector3Int(chunkPosition.x - 1, chunkPosition.y, chunkPosition.z)); neighborChunk.AddVoxel(gridPosition, density); neighborChunk = GetChunk(new Vector3Int(chunkPosition.x + 1, chunkPosition.y, chunkPosition.z)); neighborChunk.AddVoxel(gridPosition, density); } if (Mod(gridPosition.y, cellSize.y) == 0) { neighborChunk = GetChunk(new Vector3Int(chunkPosition.x, chunkPosition.y - 1, chunkPosition.z)); neighborChunk.AddVoxel(gridPosition, density); neighborChunk = GetChunk(new Vector3Int(chunkPosition.x, chunkPosition.y + 1, chunkPosition.z)); neighborChunk.AddVoxel(gridPosition, density); } if (Mod(gridPosition.z, cellSize.z) == 0) { neighborChunk = GetChunk(new Vector3Int(chunkPosition.x, chunkPosition.y, chunkPosition.z + 1)); neighborChunk.AddVoxel(gridPosition, density); neighborChunk = GetChunk(new Vector3Int(chunkPosition.x, chunkPosition.y, chunkPosition.z - 1)); neighborChunk.AddVoxel(gridPosition, density); } if (Mod(gridPosition.x, cellSize.x) == 0 && Mod(gridPosition.y, cellSize.y) == 0) { neighborChunk = GetChunk(new Vector3Int(chunkPosition.x + 1, chunkPosition.y + 1, chunkPosition.z)); neighborChunk.AddVoxel(gridPosition, density); neighborChunk = GetChunk(new Vector3Int(chunkPosition.x - 1, chunkPosition.y - 1, chunkPosition.z)); neighborChunk.AddVoxel(gridPosition, density); } if (Mod(gridPosition.x, cellSize.x) == 0 && Mod(gridPosition.z, cellSize.z) == 0) { neighborChunk = GetChunk(new Vector3Int(chunkPosition.x + 1, chunkPosition.y, chunkPosition.z + 1)); neighborChunk.AddVoxel(gridPosition, density); neighborChunk = GetChunk(new Vector3Int(chunkPosition.x - 1, chunkPosition.y, chunkPosition.z - 1)); neighborChunk.AddVoxel(gridPosition, density); } if (Mod(gridPosition.y, cellSize.y) == 0 && Mod(gridPosition.z, cellSize.z) == 0) { neighborChunk = GetChunk(new Vector3Int(chunkPosition.x, chunkPosition.y + 1, chunkPosition.z + 1)); neighborChunk.AddVoxel(gridPosition, density); neighborChunk = GetChunk(new Vector3Int(chunkPosition.x, chunkPosition.y - 1, chunkPosition.z - 1)); neighborChunk.AddVoxel(gridPosition, density); } if (Mod(gridPosition.x, cellSize.x) == 0 && Mod(gridPosition.y, cellSize.y) == 0 && Mod(gridPosition.z, cellSize.z) == 0) { neighborChunk = GetChunk(new Vector3Int(chunkPosition.x + 1, chunkPosition.y + 1, chunkPosition.z + 1)); neighborChunk.AddVoxel(gridPosition, density); neighborChunk = GetChunk(new Vector3Int(chunkPosition.x - 1, chunkPosition.y - 1, chunkPosition.z - 1)); neighborChunk.AddVoxel(gridPosition, density); } }