#pragma once #define GLM_FORCE_SWIZZLE #include #include #include #include #include "transform.hpp" static ModulePtr get_glm_module() { //ddglm::pi; using namespace chaiscript; using namespace glm; using namespace std; ModulePtr glm_module = ModulePtr(new Module); ////scalar glm_module->add(fun(static_cast(max)), "max"); glm_module->add(fun(static_cast(min)), "min"); glm_module->add(fun(static_cast(clamp)), "clamp"); glm_module->add(fun(static_cast(mix)), "mix"); glm_module->add(fun(static_cast(mix)), "lerp"); glm_module->add(fun(static_cast(radians)), "radians"); glm_module->add(fun(static_cast(degrees)), "degrees"); glm_module->add(fun(static_cast(sin)), "sin"); glm_module->add(fun(static_cast(cos)), "cos"); glm_module->add(fun(static_cast(tan)), "tan"); glm_module->add(fun(static_cast(asin)), "asin"); glm_module->add(fun(static_cast(acos)), "acos"); glm_module->add(fun(static_cast(atan)), "atan"); glm_module->add(fun(static_cast(abs)), "abs"); glm_module->add(fun(static_cast(ceil)), "ceil"); glm_module->add(fun(static_cast(floor)), "floor"); glm_module->add(fun(static_cast(fract)), "fract"); glm_module->add(fun(&glm::pi), "pi"); glm_module->add(fun(&glm::pi), "half_tau"); glm_module->add(fun(&glm::half_pi), "half_pi"); glm_module->add(fun(&glm::half_pi), "quarter_tau"); glm_module->add(fun(&glm::two_pi), "two_pi"); glm_module->add(fun(&glm::two_pi), "tau"); glm_module->add(fun(&glm::three_over_two_pi), "three_over_two_pi"); glm_module->add(fun(&glm::quarter_pi), "quarter_pi"); ////3D vector glm_module->add(user_type(), "vec3"); glm_module->add(constructor(), "vec3"); glm_module->add(constructor(), "vec3"); glm_module->add(constructor(), "vec3"); glm_module->add(constructor(), "vec3"); glm_module->add(constructor(), "vec3"); glm_module->add(fun(&vec3::x), "x"); glm_module->add(fun(&vec3::y), "y"); glm_module->add(fun(&vec3::z), "z"); glm_module->add(fun(static_cast(operator+)), "+"); glm_module->add(fun(static_cast(operator-)), "-"); glm_module->add(fun(static_cast(operator-)), "-"); glm_module->add(fun(static_cast(operator*)), "*"); glm_module->add(fun(static_cast(operator*)), "*"); glm_module->add(fun(static_cast(operator*)), "*"); glm_module->add(fun(static_cast(normalize)), "normalize"); glm_module->add(fun(static_cast(cross)), "cross"); glm_module->add(fun(static_cast(reflect)), "reflect"); glm_module->add(fun(static_cast(length)), "length"); glm_module->add(fun(static_cast(dot)), "dot"); glm_module->add(fun(static_cast(distance)), "distance"); glm_module->add(fun(static_cast(refract)), "refract"); glm_module->add(fun(static_cast(mix)), "mix"); glm_module->add(fun([](const vec3& a, const vec3& b) { return all(equal(a, b)); }), "=="); glm_module->add(fun([](const vec3& v) -> std::string { return "vec3(" + to_string(v.x) + ", " + to_string(v.y) + ", " + to_string(v.z) + ")"; }), "to_string"); ////quaternion glm_module->add(user_type(), "quat"); glm_module->add(constructor(), "quat"); glm_module->add(constructor(), "quat"); glm_module->add(fun(&quat::w), "w"); glm_module->add(fun(&quat::x), "x"); glm_module->add(fun(&quat::y), "y"); glm_module->add(fun(&quat::z), "z"); glm_module->add(fun(static_cast(angleAxis)), "angleAxis"); glm_module->add(fun(static_cast(operator*)), "*"); glm_module->add(fun(static_cast(operator*)), "*"); glm_module->add(fun(static_cast(conjugate)), "conjugate"); glm_module->add(fun(static_cast(inverse)), "inverse"); glm_module->add(fun(static_cast(normalize)), "normalize"); glm_module->add(fun(static_cast(rotate)), "rotate"); glm_module->add(fun(static_cast(mix)), "mix"); glm_module->add(fun(static_cast(mix)), "slerp"); glm_module->add(fun([](const quat& a, const quat& b) { return all(equal(a, b)); }), "=="); glm_module->add(fun([](const quat& q) -> std::string { return "quat(" + to_string(q.w) + ", " + to_string(q.x) + ", " + to_string(q.y) + ", " + to_string(q.z) + ")"; }), "to_string"); ////2D vector glm_module->add(user_type(), "vec2"); glm_module->add(constructor(), "vec2"); glm_module->add(constructor(), "vec2"); glm_module->add(constructor(), "vec2"); glm_module->add(constructor(), "vec2"); glm_module->add(fun(&vec2::x), "x"); glm_module->add(fun(&vec2::y), "y"); glm_module->add(fun(static_cast(operator+)), "+"); glm_module->add(fun(static_cast(operator-)), "-"); glm_module->add(fun(static_cast(operator-)), "-"); glm_module->add(fun(static_cast(operator*)), "*"); glm_module->add(fun(static_cast(operator*)), "*"); glm_module->add(fun(static_cast(operator*)), "*"); glm_module->add(fun(static_cast(normalize)), "normalize"); //glm_module->add(fun(static_cast(cross)), "cross"); glm_module->add(fun(static_cast(reflect)), "reflect"); glm_module->add(fun(static_cast(length)), "length"); glm_module->add(fun(static_cast(dot)), "dot"); glm_module->add(fun(static_cast(distance)), "distance"); glm_module->add(fun(static_cast(refract)), "refract"); glm_module->add(fun(static_cast(mix)), "mix"); glm_module->add(fun([](const vec2& a, const vec2& b) { return all(equal(a, b)); }), "=="); glm_module->add(fun([](const vec2& v) -> std::string { return "vec2(" + to_string(v.x) + ", " + to_string(v.y) + ", " + ")"; }), "to_string"); ////4D vector glm_module->add(user_type(), "vec4"); glm_module->add(constructor(), "vec4"); glm_module->add(constructor(), "vec4"); glm_module->add(constructor(), "vec4"); glm_module->add(constructor(), "vec4"); glm_module->add(constructor(), "vec4"); glm_module->add(constructor(), "vec4"); glm_module->add(fun(&vec4::x), "x"); glm_module->add(fun(&vec4::y), "y"); glm_module->add(fun(&vec4::z), "z"); glm_module->add(fun(&vec4::w), "w"); glm_module->add(fun(static_cast(operator+)), "+"); glm_module->add(fun(static_cast(operator-)), "-"); glm_module->add(fun(static_cast(operator-)), "-"); glm_module->add(fun(static_cast(operator*)), "*"); glm_module->add(fun(static_cast(operator*)), "*"); //glm_module->add(fun(static_cast(operator*)), "*"); glm_module->add(fun(static_cast(normalize)), "normalize"); //glm_module->add(fun(static_cast(cross)), "cross"); glm_module->add(fun(static_cast(reflect)), "reflect"); glm_module->add(fun(static_cast(length)), "length"); glm_module->add(fun(static_cast(dot)), "dot"); glm_module->add(fun(static_cast(distance)), "distance"); glm_module->add(fun(static_cast(refract)), "refract"); glm_module->add(fun(static_cast(mix)), "mix"); glm_module->add(fun([](const vec4& a, const vec4& b) { return all(equal(a, b)); }), "=="); glm_module->add(fun([](const vec4& v) -> std::string { return "vec4(" + to_string(v.x) + ", " + to_string(v.y) + ", " + to_string(v.z) + ", " + to_string(v.w) + ")"; }), "to_string"); return glm_module; }