summary refs log tree commit diff
path: root/src/World/World.hpp
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2023-08-03 02:29:44 +0200
committerMel <einebeere@gmail.com>2023-08-03 02:31:12 +0200
commit1d574e5e8fe3f08d13f1b8c4444fc4cb02cf0faf (patch)
treed151baab68d6aa444a5968a1b579c5d48025084e /src/World/World.hpp
parent15352db7bc03a176ea7a184f40a7f4e72b54b5fe (diff)
downloadmeowcraft-1d574e5e8fe3f08d13f1b8c4444fc4cb02cf0faf.tar.zst
meowcraft-1d574e5e8fe3f08d13f1b8c4444fc4cb02cf0faf.zip
World can now reassess chunk generation priorities on player movement and cancel no longer needed jobs
Diffstat (limited to 'src/World/World.hpp')
-rw-r--r--src/World/World.hpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/World/World.hpp b/src/World/World.hpp
index 92367f6..e3b08f5 100644
--- a/src/World/World.hpp
+++ b/src/World/World.hpp
@@ -21,6 +21,9 @@ private:
     void request_generation(ChunkIndex index, Real priority);
     void request_reification(ChunkIndex index, Real priority);
 
+    Bool should_reassess_priorities(Position::World player_position) const;
+    void reassess_priorities(Position::World player_position);
+
     enum class RequestType { Initial, Update };
     static Real calculate_priority(ChunkIndex chunk, Position::World player_position, RequestType request_type);
 
@@ -28,16 +31,24 @@ private:
 
     U8 m_view_distance_radius = 12;
 
+    Bool is_chunk_in_radius(Position::World position, ChunkIndex chunk) const;
+
     struct GenerationResult {
         Chunk chunk;
         U64 generation_duration;
     };
-    Compute::Queue<GenerationResult, ChunkIndex> m_generation_queue{4};
+    using GenerationQueue = Compute::Queue<GenerationResult, ChunkIndex>;
+    GenerationQueue m_generation_queue{4};
+
     struct ReificationResult {
         Chunk chunk;
         Generation::ChunkMeshing::ChunkMesh chunk_mesh;
     };
-    Compute::Queue<ReificationResult, ChunkIndex> m_reification_queue{4};
+    using ReificationQueue = Compute::Queue<ReificationResult, ChunkIndex>;
+    ReificationQueue m_reification_queue{4};
+
+    Real m_priority_reassession_distance_threshold = 50;
+    Position::World m_last_priority_reassession_at = {};
 
     Generation::Generator m_generator;
     Generation::Lighting m_lighting;