26 auto& lua = core::ServiceLocator<sol::state>::ref();
27 auto vec2_type = lua.new_usertype<glm::vec2>(
29 sol::constructors<glm::vec2(), glm::vec2(float, float)>(),
30 sol::meta_function::addition,
31 [](
const glm::vec2& a,
const glm::vec2& b) {
34 sol::meta_function::multiplication,
35 [](
const glm::vec2& a,
const glm::vec2& b) {
38 sol::meta_function::subtraction,
39 [](
const glm::vec2& a,
const glm::vec2& b) {
42 sol::meta_function::division,
43 [](
const glm::vec2& a,
const glm::vec2& b) {
46 sol::meta_function::equal_to,
47 [](
const glm::vec2& a,
const glm::vec2& b) {
52 vec2_type[
"x"] = &glm::vec2::x;
53 vec2_type[
"y"] = &glm::vec2::y;
55 auto mult_overloads = sol::overload(
56 [](
const glm::vec3& v1,
const glm::vec3& v2) -> glm::vec3 {
59 [](
const glm::vec3& v1,
float f) -> glm::vec3 {
62 [](
float f,
const glm::vec3& v1) -> glm::vec3 {
67 auto dvec2_type = lua.new_usertype<glm::dvec2>(
69 sol::constructors<glm::dvec2(), glm::dvec2(double, double)>(),
70 sol::meta_function::addition,
71 [](
const glm::dvec2& a,
const glm::dvec2& b) {
74 sol::meta_function::multiplication,
75 [](
const glm::dvec2& a,
const glm::dvec2& b) {
78 sol::meta_function::subtraction,
79 [](
const glm::dvec2& a,
const glm::dvec2& b) {
82 sol::meta_function::division,
83 [](
const glm::dvec2& a,
const glm::dvec2& b) {
86 sol::meta_function::equal_to,
87 [](
const glm::dvec2& a,
const glm::dvec2& b) {
92 dvec2_type[
"x"] = &glm::dvec2::x;
93 dvec2_type[
"y"] = &glm::dvec2::y;
95 auto vec3_type = lua.new_usertype<glm::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) {
102 sol::meta_function::multiplication,
104 sol::meta_function::subtraction,
105 [](
const glm::vec3& a,
const glm::vec3& b) {
108 sol::meta_function::unary_minus,
109 [](glm::vec3& v) -> glm::vec3 {
112 sol::meta_function::division,
113 [](
const glm::vec3& a,
const glm::vec3& b) {
116 sol::meta_function::equal_to,
117 [](
const glm::vec3& a,
const glm::vec3& b) {
122 vec3_type[
"x"] = &glm::vec3::x;
123 vec3_type[
"y"] = &glm::vec3::y;
124 vec3_type[
"z"] = &glm::vec3::z;
126 auto vec4_type = lua.new_usertype<glm::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) {
133 sol::meta_function::multiplication,
134 [](
const glm::vec4& a,
const glm::vec4& b) {
137 sol::meta_function::multiplication,
139 [](
const glm::vec4& v1,
const glm::vec4& v2) -> glm::vec4 {
142 [](
const glm::vec4& v1,
float f) -> glm::vec4 {
145 [](
float f,
const glm::vec4& v1) -> glm::vec4 {
149 sol::meta_function::multiplication,
150 [](
float a,
const glm::vec4& b) {
153 sol::meta_function::subtraction,
154 [](
const glm::vec4& a,
const glm::vec4& b) {
157 sol::meta_function::division,
158 [](
const glm::vec4& a,
const glm::vec4& b) {
161 sol::meta_function::equal_to,
162 [](
const glm::vec4& a,
const glm::vec4& b) {
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;
172 auto mat3_type = lua.new_usertype<glm::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) {
181 auto mat4_type = lua.new_usertype<glm::mat4>(
183 sol::constructors<glm::mat4(), glm::mat4(float)>(),
184 sol::meta_function::multiplication,
185 [](
const glm::mat4& a,
const glm::mat4& b) {
188 sol::meta_function::addition,
189 [](
const glm::mat4& a,
const glm::mat4& b) {
192 sol::meta_function::subtraction,
193 [](
const glm::mat4& a,
const glm::mat4& b) {
198 mat3_type[
"length"] = &glm::mat3::length;
199 mat4_type[
"length"] = &glm::mat4::length;