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.hpp37
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;