summary refs log tree commit diff
path: root/src/World/World.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/World/World.hpp')
-rw-r--r--src/World/World.hpp24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/World/World.hpp b/src/World/World.hpp
index db9d0db..92367f6 100644
--- a/src/World/World.hpp
+++ b/src/World/World.hpp
@@ -4,33 +4,41 @@
 #include "ChunkIndex.hpp"
 #include "ChunkRegistry.hpp"
 #include "../Compute/Queue.hpp"
+#include "Generation/ChunkMeshing.hpp"
 #include "Generation/Lighting.hpp"
 
 namespace MC::World {
 
 class World {
 public:
-    World() : m_queue(8) {}
-
-    std::vector<ChunkRegistry::Data*> get_visible_chunks(Vector<3> position);
+    std::vector<ChunkRegistry::Data*> get_visible_chunks(Position::World position);
 
     Real get_average_chunk_time() const;
 private:
-    std::vector<ChunkIndex> get_visible_chunk_indices(Vector<3> position) const;
+    std::vector<ChunkIndex> get_visible_chunk_indices(Position::World position) const;
 
-    void load_finished_chunks_from_queue();
+    void process_chunk_updates();
     void request_generation(ChunkIndex index, Real priority);
-    void try_to_reify_chunk(ChunkRegistry::Data& data);
+    void request_reification(ChunkIndex index, Real priority);
+
+    enum class RequestType { Initial, Update };
+    static Real calculate_priority(ChunkIndex chunk, Position::World player_position, RequestType request_type);
 
     void log_chunk_time(U64 chunk_time_ms);
 
-    U8 m_view_distance_radius = 10;
+    U8 m_view_distance_radius = 12;
 
     struct GenerationResult {
         Chunk chunk;
         U64 generation_duration;
     };
-    Compute::Queue<GenerationResult, ChunkIndex> m_queue;
+    Compute::Queue<GenerationResult, ChunkIndex> m_generation_queue{4};
+    struct ReificationResult {
+        Chunk chunk;
+        Generation::ChunkMeshing::ChunkMesh chunk_mesh;
+    };
+    Compute::Queue<ReificationResult, ChunkIndex> m_reification_queue{4};
+
     Generation::Generator m_generator;
     Generation::Lighting m_lighting;
     ChunkRegistry m_registry;