summary refs log tree commit diff
path: root/src/World/Generation/Lighting.hpp
blob: 72af0e154a8aedb1aafb7b9a44b6a25c0e1ce07d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#pragma once

#include <queue>
#include "../Chunk.hpp"
#include "../ChunkIndex.hpp"
#include "../ChunkRegistry.hpp"
#include "../Position.hpp"

namespace MC::World::Generation {

class Lighting {
public:
    void add_chunk(Chunk& chunk);
    void add_block(Chunk& chunk, Position::BlockLocal position, U8 light);

    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;
};

}