From 1d574e5e8fe3f08d13f1b8c4444fc4cb02cf0faf Mon Sep 17 00:00:00 2001 From: Mel Date: Thu, 3 Aug 2023 02:29:44 +0200 Subject: World can now reassess chunk generation priorities on player movement and cancel no longer needed jobs --- src/World/World.hpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'src/World/World.hpp') 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 m_generation_queue{4}; + using GenerationQueue = Compute::Queue; + GenerationQueue m_generation_queue{4}; + struct ReificationResult { Chunk chunk; Generation::ChunkMeshing::ChunkMesh chunk_mesh; }; - Compute::Queue m_reification_queue{4}; + using ReificationQueue = Compute::Queue; + 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; -- cgit 1.4.1