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 <glm/mat4x4.hpp>
9#include <glm/vec2.hpp>
10#include <glm/vec3.hpp>
11#include <glm/vec4.hpp>
12#include <sol/sol.hpp>
13
14#include "galaxy/core/ServiceLocator.hpp"
15
16#include "Lua.hpp"
17
18namespace galaxy
19{
20 namespace lua
21 {
23 {
24 // TODO: ivec2
25
26 auto& lua = core::ServiceLocator<sol::state>::ref();
27 auto vec2_type = lua.new_usertype<glm::vec2>(
28 "vec2",
29 sol::constructors<glm::vec2(), glm::vec2(float, float)>(),
30 sol::meta_function::addition,
31 [](const glm::vec2& a, const glm::vec2& b) {
32 return a + b;
33 },
34 sol::meta_function::multiplication,
35 [](const glm::vec2& a, const glm::vec2& b) {
36 return a * b;
37 },
38 sol::meta_function::subtraction,
39 [](const glm::vec2& a, const glm::vec2& b) {
40 return a - b;
41 },
42 sol::meta_function::division,
43 [](const glm::vec2& a, const glm::vec2& b) {
44 return a / b;
45 },
46 sol::meta_function::equal_to,
47 [](const glm::vec2& a, const glm::vec2& b) {
48 return a == b;
49 }
50 );
51
52 vec2_type["x"] = &glm::vec2::x;
53 vec2_type["y"] = &glm::vec2::y;
54
55 auto mult_overloads = sol::overload(
56 [](const glm::vec3& v1, const glm::vec3& v2) -> glm::vec3 {
57 return v1 * v2;
58 },
59 [](const glm::vec3& v1, float f) -> glm::vec3 {
60 return v1 * f;
61 },
62 [](float f, const glm::vec3& v1) -> glm::vec3 {
63 return f * v1;
64 }
65 );
66
67 auto dvec2_type = lua.new_usertype<glm::dvec2>(
68 "dvec2",
69 sol::constructors<glm::dvec2(), glm::dvec2(double, double)>(),
70 sol::meta_function::addition,
71 [](const glm::dvec2& a, const glm::dvec2& b) {
72 return a + b;
73 },
74 sol::meta_function::multiplication,
75 [](const glm::dvec2& a, const glm::dvec2& b) {
76 return a * b;
77 },
78 sol::meta_function::subtraction,
79 [](const glm::dvec2& a, const glm::dvec2& b) {
80 return a - b;
81 },
82 sol::meta_function::division,
83 [](const glm::dvec2& a, const glm::dvec2& b) {
84 return a / b;
85 },
86 sol::meta_function::equal_to,
87 [](const glm::dvec2& a, const glm::dvec2& b) {
88 return a == b;
89 }
90 );
91
92 dvec2_type["x"] = &glm::dvec2::x;
93 dvec2_type["y"] = &glm::dvec2::y;
94
95 auto vec3_type = lua.new_usertype<glm::vec3>(
96 "vec3",
97 sol::constructors<glm::vec3(), glm::vec3(float, float, float)>(),
98 sol::meta_function::addition,
99 [](const glm::vec3& a, const glm::vec3& b) {
100 return a + b;
101 },
102 sol::meta_function::multiplication,
103 mult_overloads,
104 sol::meta_function::subtraction,
105 [](const glm::vec3& a, const glm::vec3& b) {
106 return a - b;
107 },
108 sol::meta_function::unary_minus,
109 [](glm::vec3& v) -> glm::vec3 {
110 return -v;
111 },
112 sol::meta_function::division,
113 [](const glm::vec3& a, const glm::vec3& b) {
114 return a / b;
115 },
116 sol::meta_function::equal_to,
117 [](const glm::vec3& a, const glm::vec3& b) {
118 return a == b;
119 }
120 );
121
122 vec3_type["x"] = &glm::vec3::x;
123 vec3_type["y"] = &glm::vec3::y;
124 vec3_type["z"] = &glm::vec3::z;
125
126 auto vec4_type = lua.new_usertype<glm::vec4>(
127 "vec4",
128 sol::constructors<glm::vec4(), glm::vec4(float, float, float, float)>(),
129 sol::meta_function::addition,
130 [](const glm::vec4& a, const glm::vec4& b) {
131 return a + b;
132 },
133 sol::meta_function::multiplication,
134 [](const glm::vec4& a, const glm::vec4& b) {
135 return a * b;
136 },
137 sol::meta_function::multiplication,
138 sol::overload(
139 [](const glm::vec4& v1, const glm::vec4& v2) -> glm::vec4 {
140 return v1 * v2;
141 },
142 [](const glm::vec4& v1, float f) -> glm::vec4 {
143 return v1 * f;
144 },
145 [](float f, const glm::vec4& v1) -> glm::vec4 {
146 return f * v1;
147 }
148 ),
149 sol::meta_function::multiplication,
150 [](float a, const glm::vec4& b) {
151 return a * b;
152 },
153 sol::meta_function::subtraction,
154 [](const glm::vec4& a, const glm::vec4& b) {
155 return a - b;
156 },
157 sol::meta_function::division,
158 [](const glm::vec4& a, const glm::vec4& b) {
159 return a / b;
160 },
161 sol::meta_function::equal_to,
162 [](const glm::vec4& a, const glm::vec4& b) {
163 return a == b;
164 }
165 );
166
167 vec4_type["x"] = &glm::vec4::x;
168 vec4_type["y"] = &glm::vec4::y;
169 vec4_type["z"] = &glm::vec4::z;
170 vec4_type["w"] = &glm::vec4::w;
171
172 auto mat3_type = lua.new_usertype<glm::mat3>(
173 "mat3",
174 sol::constructors<glm::mat3(), glm::mat3(float, float, float, float, float, float, float, float, float)>(),
175 sol::meta_function::multiplication,
176 [](const glm::mat3& a, const glm::mat3& b) {
177 return a * b;
178 }
179 );
180
181 auto mat4_type = lua.new_usertype<glm::mat4>(
182 "mat4",
183 sol::constructors<glm::mat4(), glm::mat4(float)>(),
184 sol::meta_function::multiplication,
185 [](const glm::mat4& a, const glm::mat4& b) {
186 return a * b;
187 },
188 sol::meta_function::addition,
189 [](const glm::mat4& a, const glm::mat4& b) {
190 return a + b;
191 },
192 sol::meta_function::subtraction,
193 [](const glm::mat4& a, const glm::mat4& b) {
194 return a - b;
195 }
196 );
197
198 mat3_type["length"] = &glm::mat3::length;
199 mat4_type["length"] = &glm::mat4::length;
200 }
201 } // namespace lua
202} // namespace galaxy
void inject_glm()
Definition LuaGLM.cpp:22
Animated.cpp galaxy.
Definition Animated.cpp:16