21 auto& lua = entt::locator<sol::state>::value();
22 auto vec2_type = lua.new_usertype<glm::vec2>(
24 sol::constructors<glm::vec2(), glm::vec2(float, float)>(),
25 sol::meta_function::addition,
26 [](
const glm::vec2& a,
const glm::vec2& b) {
29 sol::meta_function::multiplication,
30 [](
const glm::vec2& a,
const glm::vec2& b) {
33 sol::meta_function::subtraction,
34 [](
const glm::vec2& a,
const glm::vec2& b) {
37 sol::meta_function::division,
38 [](
const glm::vec2& a,
const glm::vec2& b) {
41 sol::meta_function::equal_to,
42 [](
const glm::vec2& a,
const glm::vec2& b) {
47 vec2_type[
"x"] = &glm::vec2::x;
48 vec2_type[
"y"] = &glm::vec2::y;
50 auto mult_overloads = sol::overload(
51 [](
const glm::vec3& v1,
const glm::vec3& v2) -> glm::vec3 {
54 [](
const glm::vec3& v1,
float f) -> glm::vec3 {
57 [](
float f,
const glm::vec3& v1) -> glm::vec3 {
62 auto dvec2_type = lua.new_usertype<glm::dvec2>(
64 sol::constructors<glm::dvec2(), glm::dvec2(double, double)>(),
65 sol::meta_function::addition,
66 [](
const glm::dvec2& a,
const glm::dvec2& b) {
69 sol::meta_function::multiplication,
70 [](
const glm::dvec2& a,
const glm::dvec2& b) {
73 sol::meta_function::subtraction,
74 [](
const glm::dvec2& a,
const glm::dvec2& b) {
77 sol::meta_function::division,
78 [](
const glm::dvec2& a,
const glm::dvec2& b) {
81 sol::meta_function::equal_to,
82 [](
const glm::dvec2& a,
const glm::dvec2& b) {
87 dvec2_type[
"x"] = &glm::dvec2::x;
88 dvec2_type[
"y"] = &glm::dvec2::y;
90 auto ivec2_type = lua.new_usertype<glm::ivec2>(
92 sol::constructors<glm::ivec2(), glm::ivec2(int, int)>(),
93 sol::meta_function::addition,
94 [](
const glm::ivec2& a,
const glm::ivec2& b) {
97 sol::meta_function::multiplication,
98 [](
const glm::ivec2& a,
const glm::ivec2& b) {
101 sol::meta_function::subtraction,
102 [](
const glm::ivec2& a,
const glm::ivec2& b) {
105 sol::meta_function::division,
106 [](
const glm::ivec2& a,
const glm::ivec2& b) {
109 sol::meta_function::equal_to,
110 [](
const glm::ivec2& a,
const glm::ivec2& b) {
115 ivec2_type[
"x"] = &glm::ivec2::x;
116 ivec2_type[
"y"] = &glm::ivec2::y;
118 auto vec3_type = lua.new_usertype<glm::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) {
125 sol::meta_function::multiplication,
127 sol::meta_function::subtraction,
128 [](
const glm::vec3& a,
const glm::vec3& b) {
131 sol::meta_function::unary_minus,
132 [](glm::vec3& v) -> glm::vec3 {
135 sol::meta_function::division,
136 [](
const glm::vec3& a,
const glm::vec3& b) {
139 sol::meta_function::equal_to,
140 [](
const glm::vec3& a,
const glm::vec3& b) {
145 vec3_type[
"x"] = &glm::vec3::x;
146 vec3_type[
"y"] = &glm::vec3::y;
147 vec3_type[
"z"] = &glm::vec3::z;
149 auto vec4_type = lua.new_usertype<glm::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) {
156 sol::meta_function::multiplication,
157 [](
const glm::vec4& a,
const glm::vec4& b) {
160 sol::meta_function::multiplication,
162 [](
const glm::vec4& v1,
const glm::vec4& v2) -> glm::vec4 {
165 [](
const glm::vec4& v1,
float f) -> glm::vec4 {
168 [](
float f,
const glm::vec4& v1) -> glm::vec4 {
172 sol::meta_function::multiplication,
173 [](
float a,
const glm::vec4& b) {
176 sol::meta_function::subtraction,
177 [](
const glm::vec4& a,
const glm::vec4& b) {
180 sol::meta_function::division,
181 [](
const glm::vec4& a,
const glm::vec4& b) {
184 sol::meta_function::equal_to,
185 [](
const glm::vec4& a,
const glm::vec4& b) {
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;
195 auto mat3_type = lua.new_usertype<glm::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) {
204 auto mat4_type = lua.new_usertype<glm::mat4>(
206 sol::constructors<glm::mat4(), glm::mat4(float)>(),
207 sol::meta_function::multiplication,
208 [](
const glm::mat4& a,
const glm::mat4& b) {
211 sol::meta_function::addition,
212 [](
const glm::mat4& a,
const glm::mat4& b) {
215 sol::meta_function::subtraction,
216 [](
const glm::mat4& a,
const glm::mat4& b) {
221 mat3_type[
"length"] = &glm::mat3::length;
222 mat4_type[
"length"] = &glm::mat4::length;