-
- CheckChunkGeneration();
-}
-
-void World::CheckChunkGeneration() {
- if (player.ChunkCoords() != player_chunk) {
- player_chunk = player.ChunkCoords();
-
- constexpr int max_dist = 8;
- // unload far away chunks
- for (auto iter(loaded.begin()), end(loaded.end()); iter != end;) {
- if (std::abs(player_chunk.x - iter->Position().x) > max_dist
- || std::abs(player_chunk.y - iter->Position().y) > max_dist
- || std::abs(player_chunk.z - iter->Position().z) > max_dist) {
- iter = loaded.erase(iter);
- } else {
- ++iter;
- }
- }
- // abort far away queued chunks
- for (auto iter(to_generate.begin()), end(to_generate.end()); iter != end;) {
- if (std::abs(player_chunk.x - iter->Position().x) > max_dist
- || std::abs(player_chunk.y - iter->Position().y) > max_dist
- || std::abs(player_chunk.z - iter->Position().z) > max_dist) {
- iter = to_generate.erase(iter);
- } else {
- ++iter;
- }
- }
- // add missing new chunks
- glm::tvec3<int> offset(max_dist, max_dist, max_dist);
- Generate(player_chunk - offset, player_chunk + offset);
- }
-
- if (!to_generate.empty()) {
- Generate(to_generate.front());
- loaded.splice(loaded.end(), to_generate, to_generate.begin());
- }