public void LoadCycle() { int chunkSize = WorldData.CHUNK_SIZE; HashSet <Chunk> chunksToLoad = new HashSet <Chunk>(); Vector3 playerPosition = PlayerInfo.getPosition(); int px = Mathf.FloorToInt(playerPosition.x / chunkSize); int py = Mathf.FloorToInt(playerPosition.z / chunkSize); for (int x = -RENDER_DISTANCE; x < RENDER_DISTANCE + 1; x++) { for (int y = -RENDER_DISTANCE; y < RENDER_DISTANCE + 1; y++) { int chunkX = px + x; int chunkY = py + y; // If the chunk does not exist yet, generate it if (!WorldData.ContainsChunk(chunkX, chunkY)) { Tile[,] tiles = WorldGen.GenerateChunk(chunkX, chunkY); WorldData.GenerateChunk(chunkX, chunkY, tiles); InstantiateChunk(chunkX, chunkY); } chunksToLoad.Add(WorldData.chunks[chunkX, chunkY]); } } // Only hide the chunks that were loaded but shouldn't be loaded anymore loadedChunks.ExceptWith(chunksToLoad); HideChunks(loadedChunks); // Show all chunks in render distance loadedChunks.Clear(); ShowChunks(chunksToLoad); }