diff --git a/lua-api/lib/src/datatypes/Vector.cpp b/lua-api/lib/src/datatypes/Vector.cpp index 5cab4841..f5275796 100644 --- a/lua-api/lib/src/datatypes/Vector.cpp +++ b/lua-api/lib/src/datatypes/Vector.cpp @@ -33,5 +33,38 @@ namespace lua::datatypes { BIND_VECTOR3_LIKE(Vector3d, double), sol::meta_function::construct, sol::constructors() BIND_VECTOR3_LIKE_END(); + + #define BIND_VECTOR4_LIKE(name, datatype) \ + lua.new_usertype(#name, \ + "clone", [](name& v) -> name { return v; }, \ + "x", &name::x, \ + "y", &name::y, \ + "z", &name::z, \ + "w", &name::w, \ + "X", &name::x, \ + "Y", &name::y, \ + "Z", &name::z, \ + "W", &name::w, \ + "dot", [](name& v1, name& v2) { return glm::dot(v1, v2); }, \ + "length", [](name& v) { return glm::length(v); }, \ + "normalize", [](name& v) { v = glm::normalize(v); }, \ + "normalized", [](name& v) { return glm::normalize(v); }, \ + "reflect", [](name& v, name& normal) { return glm::reflect(v, normal); }, \ + "refract", [](name& v, name& normal, datatype eta) { return glm::refract(v, normal, eta); }, \ + "lerp", [](name& v1, name& v2, datatype t) { return glm::lerp(v1, v2, t); }, \ + sol::meta_function::addition, [](name& lhs, name& rhs) { return lhs + rhs; }, \ + sol::meta_function::subtraction, [](name& lhs, name& rhs) { return lhs - rhs; }, \ + sol::meta_function::multiplication, [](name& lhs, datatype scalar) { return lhs * scalar; } + + #define BIND_VECTOR4_LIKE_END() \ + ); + + BIND_VECTOR4_LIKE(Vector4f, float), + sol::meta_function::construct, sol::constructors() + BIND_VECTOR4_LIKE_END(); + + BIND_VECTOR4_LIKE(Vector4d, double), + sol::meta_function::construct, sol::constructors() + BIND_VECTOR4_LIKE_END(); } } \ No newline at end of file