#include "vulkan_engine/vulkan/coordinate.h" namespace veng { Coord Coord::operator+(const Coord& other) const { Coord result; result.seg.x = this->seg.x + other.seg.x; result.seg.y = this->seg.y + other.seg.y; result.seg.z = this->seg.z + other.seg.z; if (this->pos.x + other.pos.x > border) { result.seg.x += 1; result.pos.x += glm::mod(this->pos.x, border); result.pos.x += glm::mod(other.pos.x, border); } else { result.pos.x = this->pos.x + other.pos.x; } if (this->pos.y + other.pos.y > border) { result.seg.y += 1; result.pos.y += glm::mod(this->pos.y, border); result.pos.y += glm::mod(other.pos.y, border); } else { result.pos.y = this->pos.y + other.pos.y; } if (this->pos.z + other.pos.z > border) { result.seg.z += 1; result.pos.z += glm::mod(this->pos.z, border); result.pos.z += glm::mod(other.pos.z, border); } else { result.pos.z = this->pos.z + other.pos.z; } return result; } Coord Coord::operator-(const Coord& other) const { Coord result; result.seg.x = this->seg.x - other.seg.x; result.seg.y = this->seg.y - other.seg.y; result.seg.z = this->seg.z - other.seg.z; if (this->pos.x - other.pos.x < -border) { result.seg.x -= 1; result.pos.x -= glm::mod(this->pos.x, border); result.pos.x -= glm::mod(other.pos.x, border); } else { result.pos.x = this->pos.x - other.pos.x; } if (this->pos.y - other.pos.y < -border) { result.seg.y -= 1; result.pos.y -= glm::mod(this->pos.y, border); result.pos.y -= glm::mod(other.pos.y, border); } else { result.pos.y = this->pos.y - other.pos.y; } if (this->pos.z - other.pos.z < -border) { result.seg.z -= 1; result.pos.z -= glm::mod(this->pos.z, border); result.pos.z -= glm::mod(other.pos.z, border); } else { result.pos.z = this->pos.z - other.pos.z; } return result; } } // namespace veng