2026-02-11 01:49:59 +01:00

82 lines
1.9 KiB
C++

#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