]> git.localhorst.tv Git - blank.git/blob - src/world/Generator.hpp
5251ac69aed002c3a97e5b488e1ff863ddeba07c
[blank.git] / src / world / Generator.hpp
1 #ifndef BLANK_WORLD_GENERATOR_HPP_
2 #define BLANK_WORLD_GENERATOR_HPP_
3
4 #include "../rand/SimplexNoise.hpp"
5 #include "../rand/WorleyNoise.hpp"
6
7 #include <cstdint>
8 #include <glm/glm.hpp>
9
10
11 namespace blank {
12
13 class Block;
14 class BlockTypeRegistry;
15 class Chunk;
16
17 class Generator {
18
19 public:
20         struct Config {
21                 std::uint64_t seed = 0;
22                 struct NoiseParam {
23                         std::uint64_t seed_mask;
24                         int octaves;
25                         float persistence;
26                         float frequency;
27                         float amplitude;
28                         float growth;
29                 };
30                 NoiseParam solidity = { 0xA85033F6BCBDD110, 3, 0.5f, 1.0f/64.0f, 2.0f, 2.0f };
31                 NoiseParam humidity = { 0x3A463FB24B04A901, 3, 0.5f, 1.0f/256.0f, 2.0f, 2.0f };
32                 NoiseParam temperature = { 0x2530BA6C6134A9FB, 3, 0.5f, 1.0f/512.0f, 2.0f, 2.0f };
33                 NoiseParam richness = { 0x95A179F180103446, 3, 0.5f, 1.0f/128.0f, 2.0f, 2.0f };
34                 NoiseParam randomness = { 0x074453EEE1496390, 3, 0.5f, 1.0f/16.0f, 2.0f, 2.0f };
35         };
36
37         explicit Generator(const Config &, const BlockTypeRegistry &) noexcept;
38
39         // scan types for generation
40         void Scan();
41
42         void operator ()(Chunk &) const noexcept;
43
44 private:
45         Block Generate(const glm::vec3 &position) const noexcept;
46         static float GetValue(
47                 const SimplexNoise &,
48                 const glm::vec3 &,
49                 const Config::NoiseParam &) noexcept;
50
51 private:
52         const Config &config;
53         const BlockTypeRegistry &types;
54         SimplexNoise solidity_noise;
55         SimplexNoise humidity_noise;
56         SimplexNoise temperature_noise;
57         SimplexNoise richness_noise;
58         SimplexNoise random_noise;
59
60 };
61
62 }
63
64 #endif