]> git.localhorst.tv Git - blank.git/blobdiff - src/world/Block.hpp
special treatment for players
[blank.git] / src / world / Block.hpp
index 9fd545b3813ce5c24e244e42bbb593b75606e690..4b4ea210596bbd8d3c6adb0f63e5131cf6065708 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef BLANK_WORLD_BLOCK_HPP_
 #define BLANK_WORLD_BLOCK_HPP_
 
+#include <iosfwd>
 #include <glm/glm.hpp>
 
 
@@ -65,7 +66,23 @@ struct Block {
                }
        }
 
-       static glm::tvec3<int> FaceNormal(Face face) noexcept {
+       /// returns 1 for pro-axis, -1 for retro-axis, 0 for invalid faces
+       static int Direction(Face f) noexcept {
+               switch (f) {
+                       case FACE_RIGHT:
+                       case FACE_UP:
+                       case FACE_FRONT:
+                               return 1;
+                       case FACE_LEFT:
+                       case FACE_DOWN:
+                       case FACE_BACK:
+                               return -1;
+                       default:
+                               return 0;
+               }
+       }
+
+       static glm::ivec3 FaceNormal(Face face) noexcept {
                return face2normal[face];
        }
 
@@ -124,12 +141,24 @@ struct Block {
        };
 
 private:
-       static const glm::tvec3<int> face2normal[6];
+       static const glm::ivec3 face2normal[6];
        static const glm::mat4 orient2transform[ORIENT_COUNT];
        static const Face orient2face[ORIENT_COUNT][FACE_COUNT];
 
 };
 
+inline bool operator ==(const Block &a, const Block &b) {
+       return a.type == b.type && a.orient == b.orient;
+}
+
+inline bool operator !=(const Block &a, const Block &b) {
+       return !(a == b);
+}
+
+std::ostream &operator <<(std::ostream &, const Block &);
+std::ostream &operator <<(std::ostream &, const Block::Face &);
+std::ostream &operator <<(std::ostream &, const Block::Turn &);
+
 }
 
 #endif