#include "DeerCore/Scripting/InternalAPI/Math.h" #include "glm/glm.hpp" namespace Deer { namespace Scripting { void vec3_constructor(void* mem) { new (mem) glm::vec3(); } void mat4_constructor(void* mem) { new (mem) glm::mat4(1.0f); } glm::mat4 mat4_getRelativeMatrix(glm::mat4& other, glm::mat4& self) { return glm::inverse(other) * self; } glm::vec3 mat4_getPosition(glm::mat4& matrix) { return glm::vec3(matrix[3][0], matrix[3][1], matrix[3][2]); } void vec3_constructor_params(float x, float y, float z, void* mem) { new (mem) glm::vec3(x, y, z); } glm::vec3 vec3_add(glm::vec3& value, glm::vec3& self) { return self + value; } glm::vec3 vec3_sub(const glm::vec3& value, glm::vec3& self) { return self - value; } glm::vec3 vec3_neg(glm::vec3& self) { return -self; } glm::vec3 vec3_mult(float value, glm::vec3& self) { return self * value; } void quat_construct(glm::quat* mem) { new (mem) glm::quat(); } void quat_copyConstruct(glm::quat* data, glm::quat* mem) { new (mem) glm::quat(*data); } void quat_constructFromValue(float x, float y, float z, float w, glm::quat* mem) { new (mem) glm::quat(x, y, z, w); } glm::vec3 quat_getEuler(glm::quat* mem) { return glm::degrees(glm::eulerAngles(*mem)); } void quat_setEuler(glm::vec3 euler, glm::quat* mem) { new (mem) glm::quat(glm::radians(euler)); } glm::quat quat_multiply(glm::quat* data, glm::quat* mem) { return *mem * *data; } glm::vec3 transform_relative(glm::vec3 pos, TransformComponent* transform) { return transform->getMatrix() * glm::vec4(pos, 1.0f); } void transform_construct(TransformComponent* mem) { new (mem) TransformComponent(); } void camera_construct(CameraComponent* mem) { new (mem) CameraComponent(); } void sceneCamera_Construct(WorldCamera* mem) { new (mem) WorldCamera(); } } // namespace Scripting } // namespace Deer