diff options
Diffstat (limited to 'src/World/World.hpp')
| -rw-r--r-- | src/World/World.hpp | 37 |
1 files changed, 7 insertions, 30 deletions
diff --git a/src/World/World.hpp b/src/World/World.hpp index 3635d8a..db9d0db 100644 --- a/src/World/World.hpp +++ b/src/World/World.hpp @@ -1,12 +1,10 @@ #pragma once -#include <unordered_map> -#include <unordered_set> -#include <optional> #include "Generation/Generator.hpp" #include "ChunkIndex.hpp" -#include "../GFX/Binder.hpp" +#include "ChunkRegistry.hpp" #include "../Compute/Queue.hpp" +#include "Generation/Lighting.hpp" namespace MC::World { @@ -14,39 +12,18 @@ class World { public: World() : m_queue(8) {} - enum class ChunkStatus { - Empty, - WaitingForGeneration, - WaitingForReification, - Done - }; - - struct ChunkData { - ChunkIndex index; - ChunkStatus status; - std::optional<Chunk> chunk = {}; - - std::optional<GFX::Mesh> land_mesh_data = {}; - std::optional<GFX::Mesh> water_mesh_data = {}; - - std::optional<GFX::BindableMesh> land_mesh = {}; - std::optional<GFX::BindableMesh> water_mesh = {}; - }; - - std::vector<ChunkData*> get_visible_chunks(Vector<3> position); - Chunk* get_chunk_for_position(Vector<3> position); + std::vector<ChunkRegistry::Data*> get_visible_chunks(Vector<3> position); Real get_average_chunk_time() const; private: std::vector<ChunkIndex> get_visible_chunk_indices(Vector<3> position) const; + void load_finished_chunks_from_queue(); void request_generation(ChunkIndex index, Real priority); - void try_to_reify_chunk(ChunkData& data); + void try_to_reify_chunk(ChunkRegistry::Data& data); void log_chunk_time(U64 chunk_time_ms); - ChunkData& get(ChunkIndex index); - U8 m_view_distance_radius = 10; struct GenerationResult { @@ -55,8 +32,8 @@ private: }; Compute::Queue<GenerationResult, ChunkIndex> m_queue; Generation::Generator m_generator; - - std::unordered_map<ChunkIndex, ChunkData> m_chunks; + Generation::Lighting m_lighting; + ChunkRegistry m_registry; struct Statistics { UInt chunk_time_sample_count; |
