Example #1
0
        private static void MarkChunkAsNeedingMeshUpdate(ChunkSpacePosition position)
        {
            Chunk checkChunk = ChunkRepository.GetChunkAtPosition(position);

            if (checkChunk != null)
            {
                checkChunk.MarkForMeshUpdate();
            }
        }
Example #2
0
        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;
                            }
                        }
                    }
                }
            }
        }
Example #3
0
        // 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);
                }
            }
        }