diff options
Diffstat (limited to 'src/World/BlockSide.hpp')
| -rw-r--r-- | src/World/BlockSide.hpp | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/World/BlockSide.hpp b/src/World/BlockSide.hpp new file mode 100644 index 0000000..45efb11 --- /dev/null +++ b/src/World/BlockSide.hpp @@ -0,0 +1,66 @@ +#pragma once + +#include <cstdint> +#include <vector> +#include <array> +#include "../Math/Vector.hpp" + +namespace MC { + +class BlockSide { +public: + enum Value : uint8_t { + Front, + Back, + + Top, + Bottom, + + Left, + Right, + }; + + BlockSide() = default; + BlockSide(Value side) : m_side(side) {} + + operator Value() const { return m_side; } + + std::array<Vector<3>, 4> face() { + switch (m_side) { + case Front: + return {{ + {0.0f, 0.0f, 1.0f}, {1.0f, 0.0f, 1.0f}, {1.0f, 1.0f, 1.0f}, {0.0f, 1.0f, 1.0f}, + }}; + case Back: + return {{ + {1.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f}, {0.0f, 1.0f, 0.0f}, {1.0f, 1.0f, 0.0f}, + }}; + case Top: + return {{ + {0.0f, 1.0f, 1.0f}, {1.0f, 1.0f, 1.0f}, {1.0f, 1.0f, 0.0f}, {0.0f, 1.0f, 0.0f}, + }}; + case Bottom: + return {{ + {0.0f, 0.0f, 0.0f}, {1.0f, 0.0f, 0.0f}, {1.0f, 0.0f, 1.0f}, {0.0f, 0.0f, 1.0f}, + }}; + case Left: + return {{ + {0.0f, 0.0f, 0.0f},{0.0f, 0.0f, 1.0f},{0.0f, 1.0f, 1.0f}, {0.0f, 1.0f, 0.0f}, + }}; + case Right: + return {{ + {1.0f, 0.0f, 1.0f}, {1.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, + }}; + } + } + + static std::vector<BlockSide> all() { + return { + Front, Back, Top, Bottom, Left, Right, + }; + } +private: + Value m_side; +}; + +} \ No newline at end of file |
