Esempio n. 1
0
        private Chunk GenerateChunk(ChunkSpacePosition position)
        {
            int arrayX = (position.x - worldViewPositionX) + Configuration.CHUNK_VIEW_DISTANCE;
            int arrayZ = (position.z - worldViewPositionZ) + Configuration.CHUNK_VIEW_DISTANCE;

            Chunk newChunk = chunkPool.GetChunk(position);

            ChunkRepository.Add(newChunk);
            ChunkRepository.SetChunkAtPosition(position, newChunk);
            loadedChunksCheckArray[arrayX, position.y, arrayZ] = true;
            newChunk.LoadOrGenerate();
            return(newChunk);
        }
Esempio n. 2
0
        // TODO -- Split up this function to make it shorter and more manageable
        public void CleanupOldChunks()
        {
            // TODO -- This is a weird place to update the worldviewposition
            worldViewPositionX = (int)(Camera.main.transform.position.x / Chunk.SIZE);
            worldViewPositionZ = (int)(Camera.main.transform.position.z / Chunk.SIZE);

            for (int xIttr = 0; xIttr < Configuration.CHUNK_VIEW_DISTANCE * 2 + 1; xIttr++)
            {
                for (int yIttr = 0; yIttr < chunkArrayHeight; yIttr++)
                {
                    for (int zIttr = 0; zIttr < Configuration.CHUNK_VIEW_DISTANCE * 2 + 1; zIttr++)
                    {
                        loadedChunksCheckArray[xIttr, yIttr, zIttr] = false;
                    }
                }
            }

            // Get rid of chunks that are too far from the camera
            for (int chunkIndex = 0; chunkIndex < ChunkRepository.NumberOfChunks(); chunkIndex++)
            {
                Chunk chunk = ChunkRepository.GetChunkAtIndex(chunkIndex);

                // If the chunk is out of range now, return it
                int xDiff = Mathf.Abs(chunk.WorldPosition().x - worldViewPositionX);
                int zDiff = Mathf.Abs(chunk.WorldPosition().z - worldViewPositionZ);

                if ((xDiff > Configuration.CHUNK_VIEW_DISTANCE) ||
                    (zDiff > Configuration.CHUNK_VIEW_DISTANCE))
                {
                    ChunkSpacePosition location = chunk.WorldPosition();
                    ChunkRepository.SetChunkAtPosition(location, null);
                    ChunkRepository.Remove(chunk);

                    chunk.MarkForUnload();
                    unloadChunksList.Add(chunk);
                }
                else
                {
                    int markX = (chunk.WorldPosition().x - worldViewPositionX) + Configuration.CHUNK_VIEW_DISTANCE;
                    int markZ = (chunk.WorldPosition().z - worldViewPositionZ) + Configuration.CHUNK_VIEW_DISTANCE;
                    loadedChunksCheckArray[markX, chunk.WorldPosition().y, markZ] = true;
                }
            }
        }