63 lines
1.9 KiB
C++
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
|