X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fworld%2FBlock.hpp;h=4b4ea210596bbd8d3c6adb0f63e5131cf6065708;hb=dbfcb12348b80e2582f710acb1e4ed0011889ba2;hp=0bb5fd8964b0655dae6addb1dd49903cf89d08ff;hpb=a74e9630e55ca47c23f3ba3c9ccffcaccad394ff;p=blank.git diff --git a/src/world/Block.hpp b/src/world/Block.hpp index 0bb5fd8..4b4ea21 100644 --- a/src/world/Block.hpp +++ b/src/world/Block.hpp @@ -66,7 +66,23 @@ struct Block { } } - static glm::tvec3 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]; } @@ -125,13 +141,19 @@ struct Block { }; private: - static const glm::tvec3 face2normal[6]; + static const glm::ivec3 face2normal[6]; static const glm::mat4 orient2transform[ORIENT_COUNT]; static const Face orient2face[ORIENT_COUNT][FACE_COUNT]; }; -bool operator ==(const Block &, const Block &); +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 &);