#pragma once #include #include namespace MC::World { class BlockType { public: enum Value : uint8_t { Air, Dirt, Grass, Stone, Sand, Snow, Wood, Leaves, Water, }; static constexpr uint8_t Size = Water + 1; BlockType() : m_block(Air) {} BlockType(Value block) : m_block(block) {} operator Value() const { return m_block; } bool is_transparent() const { switch (m_block) { case Air: case Leaves: return true; default: return false; } } static std::vector all() { return { Air, Dirt, Grass, Stone, Sand, Snow, Wood, Leaves, Water, }; } private: Value m_block; }; }