diff options
Diffstat (limited to 'src/World/World.hpp')
| -rw-r--r-- | src/World/World.hpp | 24 |
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; |
