Chira Engine
A customizable MIT-licensed game engine.
Types.h
1 #pragma once
2 
3 #include <glm/glm.hpp>
4 #include <glm/ext/matrix_transform.hpp>
5 #include <glm/gtx/quaternion.hpp>
6 #include <nlohmann/json.hpp>
7 
8 // Defined outside the chira namespace so it looks better in headers
9 using byte = std::uint8_t;
10 
11 namespace glm {
12 
13 using vec2b = vec<2, bool>;
14 using vec2i = vec<2, int>;
15 using vec2u = vec<2, unsigned int>;
16 using vec2f = vec<2, float>;
17 using vec2d = vec<2, double>;
18 
19 using vec3b = vec<3, bool>;
20 using vec3i = vec<3, int>;
21 using vec3u = vec<3, unsigned int>;
22 using vec3f = vec<3, float>;
23 using vec3d = vec<3, double>;
24 
25 using vec4b = vec<4, bool>;
26 using vec4i = vec<4, int>;
27 using vec4u = vec<4, unsigned int>;
28 using vec4f = vec<4, float>;
29 using vec4d = vec<4, double>;
30 
31 constexpr const std::size_t VEC4F_SIZE = sizeof(vec4f);
32 constexpr const std::size_t MAT4_SIZE = sizeof(mat4);
33 
34 NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(vec2b, x, y)
35 NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(vec2i, x, y)
36 NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(vec2u, x, y)
37 NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(vec2f, x, y)
38 NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(vec2d, x, y)
39 
40 NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(vec3b, x, y, z)
41 NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(vec3i, x, y, z)
42 NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(vec3u, x, y, z)
43 NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(vec3f, x, y, z)
44 NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(vec3d, x, y, z)
45 
46 NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(vec4b, x, y, z, w)
47 NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(vec4i, x, y, z, w)
48 NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(vec4u, x, y, z, w)
49 NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(vec4f, x, y, z, w)
50 NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(vec4d, x, y, z, w)
51 
52 NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(quat, x, y, z, w)
53 
54 } // namespace glm