41 lines
1.3 KiB
C++
41 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include <glm/glm.hpp>
|
|
#include <glm/gtx/hash.hpp>
|
|
|
|
namespace glm {
|
|
typedef vec<3, long long> lvec3;
|
|
typedef vec<4, long long> lvec4;
|
|
}
|
|
|
|
typedef glm::vec3 camera_pos;
|
|
typedef glm::lvec3 voxel_pos;
|
|
typedef glm::ivec3 chunk_pos;
|
|
typedef glm::vec<3, ushort> chunk_voxel_pos;
|
|
|
|
namespace glm {
|
|
ivec3 inline iround(const vec3& p) {
|
|
return ivec3(std::round<int>(p.x), std::round<int>(p.y), std::round<int>(p.z));
|
|
}
|
|
int inline length2(const ivec3& a) {
|
|
return a.x * a.x + a.y * a.y + a.z * a.z;
|
|
}
|
|
ivec3 inline diff(const ivec3& a, const ivec3& b) {
|
|
return glm::abs(glm::abs(a) - glm::abs(b));
|
|
}
|
|
|
|
uint inline rem(long long value, uint m) {
|
|
return value < 0 ? ((value+1) % (long long)m) + m - 1 : value % (long long)m;
|
|
}
|
|
int inline div(long long value, uint m) {
|
|
return value < 0 ? ((value+1) / (long long)m) - 1 : value / (long long)m;
|
|
}
|
|
chunk_voxel_pos inline modulo(const voxel_pos& value, const chunk_voxel_pos& m) {
|
|
return chunk_voxel_pos(rem(value.x, m.x), rem(value.y, m.y), rem(value.z, m.z));
|
|
}
|
|
chunk_pos inline divide(const voxel_pos &value, const chunk_voxel_pos &m)
|
|
{
|
|
return chunk_pos(div(value.x, m.x), div(value.y, m.y), div(value.z, m.z));
|
|
}
|
|
}
|