summary refs log tree commit diff
path: root/src/World/BlockSide.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/World/BlockSide.hpp')
-rw-r--r--src/World/BlockSide.hpp66
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