galaxy 1.0.0
Real-Time C++23 Game Programming Framework. Built on data-driven design principles and agile software engineering.
Loading...
Searching...
No Matches
LuaGLM.cpp
Go to the documentation of this file.
1
7
8#include <entt/locator/locator.hpp>
9#include <glm/mat4x4.hpp>
10#include <glm/vec2.hpp>
11#include <glm/vec3.hpp>
12#include <glm/vec4.hpp>
13#include <sol/sol.hpp>
14
15#include "../Lua.hpp"
16
17namespace galaxy
18{
19 void Lua::inject_glm() noexcept
20 {
21 auto& lua = entt::locator<sol::state>::value();
22 auto vec2_type = lua.new_usertype<glm::vec2>(
23 "vec2",
24 sol::constructors<glm::vec2(), glm::vec2(float, float)>(),
25 sol::meta_function::addition,
26 [](const glm::vec2& a, const glm::vec2& b) {
27 return a + b;
28 },
29 sol::meta_function::multiplication,
30 [](const glm::vec2& a, const glm::vec2& b) {
31 return a * b;
32 },
33 sol::meta_function::subtraction,
34 [](const glm::vec2& a, const glm::vec2& b) {
35 return a - b;
36 },
37 sol::meta_function::division,
38 [](const glm::vec2& a, const glm::vec2& b) {
39 return a / b;
40 },
41 sol::meta_function::equal_to,
42 [](const glm::vec2& a, const glm::vec2& b) {
43 return a == b;
44 }
45 );
46
47 vec2_type["x"] = &glm::vec2::x;
48 vec2_type["y"] = &glm::vec2::y;
49
50 auto mult_overloads = sol::overload(
51 [](const glm::vec3& v1, const glm::vec3& v2) -> glm::vec3 {
52 return v1 * v2;
53 },
54 [](const glm::vec3& v1, float f) -> glm::vec3 {
55 return v1 * f;
56 },
57 [](float f, const glm::vec3& v1) -> glm::vec3 {
58 return f * v1;
59 }
60 );
61
62 auto dvec2_type = lua.new_usertype<glm::dvec2>(
63 "dvec2",
64 sol::constructors<glm::dvec2(), glm::dvec2(double, double)>(),
65 sol::meta_function::addition,
66 [](const glm::dvec2& a, const glm::dvec2& b) {
67 return a + b;
68 },
69 sol::meta_function::multiplication,
70 [](const glm::dvec2& a, const glm::dvec2& b) {
71 return a * b;
72 },
73 sol::meta_function::subtraction,
74 [](const glm::dvec2& a, const glm::dvec2& b) {
75 return a - b;
76 },
77 sol::meta_function::division,
78 [](const glm::dvec2& a, const glm::dvec2& b) {
79 return a / b;
80 },
81 sol::meta_function::equal_to,
82 [](const glm::dvec2& a, const glm::dvec2& b) {
83 return a == b;
84 }
85 );
86
87 dvec2_type["x"] = &glm::dvec2::x;
88 dvec2_type["y"] = &glm::dvec2::y;
89
90 auto ivec2_type = lua.new_usertype<glm::ivec2>(
91 "ivec2",
92 sol::constructors<glm::ivec2(), glm::ivec2(int, int)>(),
93 sol::meta_function::addition,
94 [](const glm::ivec2& a, const glm::ivec2& b) {
95 return a + b;
96 },
97 sol::meta_function::multiplication,
98 [](const glm::ivec2& a, const glm::ivec2& b) {
99 return a * b;
100 },
101 sol::meta_function::subtraction,
102 [](const glm::ivec2& a, const glm::ivec2& b) {
103 return a - b;
104 },
105 sol::meta_function::division,
106 [](const glm::ivec2& a, const glm::ivec2& b) {
107 return a / b;
108 },
109 sol::meta_function::equal_to,
110 [](const glm::ivec2& a, const glm::ivec2& b) {
111 return a == b;
112 }
113 );
114
115 ivec2_type["x"] = &glm::ivec2::x;
116 ivec2_type["y"] = &glm::ivec2::y;
117
118 auto vec3_type = lua.new_usertype<glm::vec3>(
119 "vec3",
120 sol::constructors<glm::vec3(), glm::vec3(float, float, float)>(),
121 sol::meta_function::addition,
122 [](const glm::vec3& a, const glm::vec3& b) {
123 return a + b;
124 },
125 sol::meta_function::multiplication,
126 mult_overloads,
127 sol::meta_function::subtraction,
128 [](const glm::vec3& a, const glm::vec3& b) {
129 return a - b;
130 },
131 sol::meta_function::unary_minus,
132 [](glm::vec3& v) -> glm::vec3 {
133 return -v;
134 },
135 sol::meta_function::division,
136 [](const glm::vec3& a, const glm::vec3& b) {
137 return a / b;
138 },
139 sol::meta_function::equal_to,
140 [](const glm::vec3& a, const glm::vec3& b) {
141 return a == b;
142 }
143 );
144
145 vec3_type["x"] = &glm::vec3::x;
146 vec3_type["y"] = &glm::vec3::y;
147 vec3_type["z"] = &glm::vec3::z;
148
149 auto vec4_type = lua.new_usertype<glm::vec4>(
150 "vec4",
151 sol::constructors<glm::vec4(), glm::vec4(float, float, float, float)>(),
152 sol::meta_function::addition,
153 [](const glm::vec4& a, const glm::vec4& b) {
154 return a + b;
155 },
156 sol::meta_function::multiplication,
157 [](const glm::vec4& a, const glm::vec4& b) {
158 return a * b;
159 },
160 sol::meta_function::multiplication,
161 sol::overload(
162 [](const glm::vec4& v1, const glm::vec4& v2) -> glm::vec4 {
163 return v1 * v2;
164 },
165 [](const glm::vec4& v1, float f) -> glm::vec4 {
166 return v1 * f;
167 },
168 [](float f, const glm::vec4& v1) -> glm::vec4 {
169 return f * v1;
170 }
171 ),
172 sol::meta_function::multiplication,
173 [](float a, const glm::vec4& b) {
174 return a * b;
175 },
176 sol::meta_function::subtraction,
177 [](const glm::vec4& a, const glm::vec4& b) {
178 return a - b;
179 },
180 sol::meta_function::division,
181 [](const glm::vec4& a, const glm::vec4& b) {
182 return a / b;
183 },
184 sol::meta_function::equal_to,
185 [](const glm::vec4& a, const glm::vec4& b) {
186 return a == b;
187 }
188 );
189
190 vec4_type["x"] = &glm::vec4::x;
191 vec4_type["y"] = &glm::vec4::y;
192 vec4_type["z"] = &glm::vec4::z;
193 vec4_type["w"] = &glm::vec4::w;
194
195 auto mat3_type = lua.new_usertype<glm::mat3>(
196 "mat3",
197 sol::constructors<glm::mat3(), glm::mat3(float, float, float, float, float, float, float, float, float)>(),
198 sol::meta_function::multiplication,
199 [](const glm::mat3& a, const glm::mat3& b) {
200 return a * b;
201 }
202 );
203
204 auto mat4_type = lua.new_usertype<glm::mat4>(
205 "mat4",
206 sol::constructors<glm::mat4(), glm::mat4(float)>(),
207 sol::meta_function::multiplication,
208 [](const glm::mat4& a, const glm::mat4& b) {
209 return a * b;
210 },
211 sol::meta_function::addition,
212 [](const glm::mat4& a, const glm::mat4& b) {
213 return a + b;
214 },
215 sol::meta_function::subtraction,
216 [](const glm::mat4& a, const glm::mat4& b) {
217 return a - b;
218 }
219 );
220
221 mat3_type["length"] = &glm::mat3::length;
222 mat4_type["length"] = &glm::mat4::length;
223 }
224} // namespace galaxy
static void inject_glm() noexcept
Injects GLM into Lua.
Definition LuaGLM.cpp:19
Animated.cpp galaxy.
Definition Animated.cpp:16