summary refs log tree commit diff
path: root/src/World/World.cpp
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2023-06-12 23:07:36 +0200
committerMel <einebeere@gmail.com>2023-06-12 23:07:36 +0200
commit92ac46df6afa8ee76f972cceb681cf32658f84a2 (patch)
tree6ff89b9d6e8e0568f346b5f7b8b9e7ba3e74211e /src/World/World.cpp
parentd0de60dc33df75fbcacb53a09568b14d0fd48cb9 (diff)
downloadmeowcraft-92ac46df6afa8ee76f972cceb681cf32658f84a2.tar.zst
meowcraft-92ac46df6afa8ee76f972cceb681cf32658f84a2.zip
Start generation from player position
Diffstat (limited to 'src/World/World.cpp')
-rw-r--r--src/World/World.cpp23
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);
     });
 }