Files
Np_Term/impl/vulkan_engine/vulkan/coordinate.cpp

63 lines
1.9 KiB
C++

#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