X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fworld%2FBlock.hpp;h=2eac5ff6ca13b688ad1892ec879181e87ce26bef;hb=57e4a98dcdf7ed1c38ef47bd4152d9965a5e8960;hp=274e3d3c3120369eb8915c752db357c8b8b80b23;hpb=549646ac3e5bede5e77031f773649edf8de83608;p=blank.git diff --git a/src/world/Block.hpp b/src/world/Block.hpp index 274e3d3..2eac5ff 100644 --- a/src/world/Block.hpp +++ b/src/world/Block.hpp @@ -1,8 +1,9 @@ #ifndef BLANK_WORLD_BLOCK_HPP_ #define BLANK_WORLD_BLOCK_HPP_ +#include "../graphics/glm.hpp" + #include -#include namespace blank { @@ -11,7 +12,6 @@ namespace blank { struct Block { using Type = unsigned short; - using Pos = glm::vec3; enum Face { FACE_UP, @@ -66,12 +66,28 @@ struct Block { } } + /// 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]; } static Face NormalFace(const glm::vec3 &norm) noexcept { - const glm::vec3 anorm(abs(norm)); + const glm::vec3 anorm(glm::abs(norm)); if (anorm.x > anorm.y) { if (anorm.x > anorm.z) { return norm.x > 0.0f ? FACE_RIGHT : FACE_LEFT; @@ -131,7 +147,13 @@ private: }; -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 &);