diff options
Diffstat (limited to 'src/World/Generation/Decoration.hpp')
| -rw-r--r-- | src/World/Generation/Decoration.hpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/World/Generation/Decoration.hpp b/src/World/Generation/Decoration.hpp new file mode 100644 index 0000000..a592e72 --- /dev/null +++ b/src/World/Generation/Decoration.hpp @@ -0,0 +1,34 @@ +#pragma once + +#include "../Chunk.hpp" +#include "../../Math/Random.hpp" + +namespace MC::World::Generation { + +class Decorator { +public: + using Pos = Vector<3, uint>; + + virtual ~Decorator() = default; + + virtual void decorate_chunk(Chunk& chunk) = 0; + + static void put_block(Chunk& chunk, Pos pos, BlockType block); + static void draw_column(Chunk& chunk, Pos pos, uint height, BlockType block); + static void draw_circle(Chunk& chunk, Pos pos, Vector<3> axis, float radius, BlockType block); +}; + +class TreeDecorator final : public Decorator { +public: + void decorate_chunk(Chunk& chunk) override; +private: + void draw_tree(Chunk& chunk, Pos pos) const; + + static bool is_valid_position(Pos pos); + + static constexpr uint s_tree_radius = 3; + + Math::Random::Noise<2> m_tree_noise; +}; + +} |
