summary refs log tree commit diff
path: root/src/World/Generation/Lighting.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/World/Generation/Lighting.hpp')
-rw-r--r--src/World/Generation/Lighting.hpp30
1 files changed, 25 insertions, 5 deletions
diff --git a/src/World/Generation/Lighting.hpp b/src/World/Generation/Lighting.hpp
index 7bb8fcc..72af0e1 100644
--- a/src/World/Generation/Lighting.hpp
+++ b/src/World/Generation/Lighting.hpp
@@ -1,13 +1,33 @@
 #pragma once
 
+#include <queue>
 #include "../Chunk.hpp"
-#include "ChunkNeighbors.hpp"
+#include "../ChunkIndex.hpp"
+#include "../ChunkRegistry.hpp"
+#include "../Position.hpp"
 
-namespace MC::World::Generation::Lighting {
+namespace MC::World::Generation {
 
-constexpr U8 LightSun = 200;
-constexpr U8 LightTorch = 100;
+class Lighting {
+public:
+    void add_chunk(Chunk& chunk);
+    void add_block(Chunk& chunk, Position::BlockLocal position, U8 light);
 
-void light_chunk(Chunk& chunk, ChunkNeighbors& neighbors);
+    void illuminate(ChunkRegistry& chunks);
+private:
+    static constexpr U8 SunBrightness = 200;
+    static constexpr U8 DefaultFalloff = 10;
+
+    struct Operation {
+        ChunkIndex chunk;
+        Position::BlockLocal position;
+        U8 origin;
+    };
+
+    void enqueue(ChunkIndex chunk, Position::BlockLocal position, U8 origin);
+    void process(ChunkRegistry& chunks, Operation op);
+
+    std::queue<Operation> m_queue;
+};
 
 }