diff options
| author | Mel <einebeere@gmail.com> | 2023-06-12 23:07:36 +0200 |
|---|---|---|
| committer | Mel <einebeere@gmail.com> | 2023-06-12 23:07:36 +0200 |
| commit | 92ac46df6afa8ee76f972cceb681cf32658f84a2 (patch) | |
| tree | 6ff89b9d6e8e0568f346b5f7b8b9e7ba3e74211e /src/World/World.cpp | |
| parent | d0de60dc33df75fbcacb53a09568b14d0fd48cb9 (diff) | |
| download | meowcraft-92ac46df6afa8ee76f972cceb681cf32658f84a2.tar.zst meowcraft-92ac46df6afa8ee76f972cceb681cf32658f84a2.zip | |
Start generation from player position
Diffstat (limited to 'src/World/World.cpp')
| -rw-r--r-- | src/World/World.cpp | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/src/World/World.cpp b/src/World/World.cpp index 1782fd4..9d88af3 100644 --- a/src/World/World.cpp +++ b/src/World/World.cpp @@ -15,7 +15,7 @@ std::vector<World::ChunkData> World::get_visible_chunks(Vector<3> position) { } if (!updates.empty()) { - process_chunk_visibility_updates(updates); + process_chunk_visibility_updates(updates, position); m_visible_chunks = visible_chunks; } @@ -31,22 +31,19 @@ std::vector<World::ChunkData> World::get_visible_chunks(Vector<3> position) { return chunks; } -void World::process_chunk_visibility_updates(std::unordered_set<ChunkIndex>& new_chunks) { +void World::process_chunk_visibility_updates(std::unordered_set<ChunkIndex>& new_chunks, Vector<3> player) { for (auto new_index: new_chunks) { auto& data = get(new_index); switch (data.status) { case ChunkStatus::Empty: - request_generation(new_index); - data.status = ChunkStatus::InFlight; - break; - case ChunkStatus::InFlight: - // Continue waiting... + request_generation(new_index, player.distance(new_index.middle())); + data.status = ChunkStatus::WaitingForGeneration; break; case ChunkStatus::Done: - if (!data.mesh.has_value()) { - auto mesh = data.chunk.value().mesh(); - data.mesh = GFX::Binder::load(mesh); - } + data.mesh = GFX::Binder::load(data.chunk.value().mesh()); + data.status = ChunkStatus::Done; + break; + case ChunkStatus::WaitingForGeneration: break; } } @@ -82,8 +79,8 @@ std::unordered_set<ChunkIndex> World::load_finished_chunks_from_queue() { return indices; } -void World::request_generation(ChunkIndex index) { - m_queue.add(index, [=]() { +void World::request_generation(ChunkIndex index, float priority) { + m_queue.add(index, priority, [=]() { return m_generator.generate(index.x, index.y); }); } |
