private static void MarkChunkAsNeedingMeshUpdate(ChunkSpacePosition position) { Chunk checkChunk = ChunkRepository.GetChunkAtPosition(position); if (checkChunk != null) { checkChunk.MarkForMeshUpdate(); } }
public IEnumerable IterateChunksAroundTheWorldPosition(int numberOfSpokes) { ChunkSpacePosition lastPosition; lastPosition.x = 0; lastPosition.y = 0; lastPosition.z = 0; Chunk chunk = null; for (int distance = 0; distance <= Configuration.CHUNK_VIEW_DISTANCE; distance++) { for (int angle = 0; angle < 360 / numberOfSpokes; angle += 1) { for (int worldHeight = chunkArrayHeight - 1; worldHeight >= 0; worldHeight--) { for (int spokeNum = 0; spokeNum < numberOfSpokes; spokeNum++) { float calculateAngle = angle + spokeNum * (360 / numberOfSpokes); int xOffset = (int)(Mathf.Sin(Mathf.Deg2Rad * calculateAngle) * (distance + 0.5f)); int zOffset = (int)(Mathf.Cos(Mathf.Deg2Rad * calculateAngle) * (distance + 0.5f)); //if (frameStopwatch.ElapsedMilliseconds >= partialFrameLength) { break; } ChunkSpacePosition position; position.x = worldViewPositionX + xOffset; position.y = worldHeight; position.z = worldViewPositionZ + zOffset; if (chunk == null || lastPosition.x != position.x || lastPosition.y != position.y || lastPosition.z != position.z) { chunk = ChunkRepository.GetChunkAtPosition(position); if (chunk != null) { yield return(chunk); } lastPosition = position; } } } } } }
// TODO -- Make this func shorter public void GenerateMeshes(Chunk chunk) { if (chunk.NeedsMeshUpdate() && (chunk.GetLoadState() == ChunkLoadState.WaitingForMeshUpdate || chunk.GetLoadState() == ChunkLoadState.Done)) { ChunkSpacePosition position = chunk.WorldPosition(); position.z -= 1; Chunk northChunk = ChunkRepository.GetChunkAtPosition(position); position = chunk.WorldPosition(); position.z += 1; Chunk southChunk = ChunkRepository.GetChunkAtPosition(position); position = chunk.WorldPosition(); position.x -= 1; Chunk westChunk = ChunkRepository.GetChunkAtPosition(position); position = chunk.WorldPosition(); position.x += 1; Chunk eastChunk = ChunkRepository.GetChunkAtPosition(position); position = chunk.WorldPosition(); position.y += 1; Chunk aboveChunk = ChunkRepository.GetChunkAtPosition(position); position = chunk.WorldPosition(); position.y -= 1; Chunk belowChunk = ChunkRepository.GetChunkAtPosition(position); if ((northChunk == null || northChunk.BlocksAreGenerating() == false) && (southChunk == null || southChunk.BlocksAreGenerating() == false) && (westChunk == null || westChunk.BlocksAreGenerating() == false) && (eastChunk == null || eastChunk.BlocksAreGenerating() == false) && (aboveChunk == null || aboveChunk.BlocksAreGenerating() == false) && (belowChunk == null || belowChunk.BlocksAreGenerating() == false)) { chunk.GenerateMesh(northChunk, southChunk, westChunk, eastChunk, aboveChunk, belowChunk); } } }