Program Listing for File Transform.hpp
↰ Return to documentation for file (engine/include/Cacao/Transform.hpp)
#pragma once
#include "glm/trigonometric.hpp"
#include "glm/vec3.hpp"
#include "glm/mat4x4.hpp"
#include "glm/gtc/quaternion.hpp"
#include "DllHelper.hpp"
namespace Cacao {
class CACAO_API Transform {
public:
Transform(glm::vec3 position, glm::quat rotation, glm::vec3 scale)
: pos(position), scale(scale), rot(rotation), transMat(1.0) {
RecalculateTransformationMatrix();
}
Transform(glm::vec3 position, glm::vec3 rotation, glm::vec3 scale)
: pos(position), scale(scale), rot(glm::radians(rotation)), transMat(1.0) {
RecalculateTransformationMatrix();
}
Transform()
: pos(0, 0, 0), scale(1, 1, 1), rot(1.0, 0.0, 0.0, 0.0) {
RecalculateTransformationMatrix();
}
glm::vec3 GetPosition() const {
return pos;
}
glm::quat GetRotation() const {
return rot;
}
glm::vec3 GetRotationEuler() const {
return glm::degrees(glm::eulerAngles(rot));
}
glm::vec3 GetScale() const {
return scale;
}
void SetPosition(glm::vec3 newPos) {
pos = newPos;
RecalculateTransformationMatrix();
}
void SetRotation(glm::quat newRot) {
rot = newRot;
RecalculateTransformationMatrix();
}
void SetRotationEuler(glm::vec3 newRot) {
rot = glm::quat(glm::radians(newRot));
RecalculateTransformationMatrix();
}
void SetScale(glm::vec3 newScale) {
scale = newScale;
RecalculateTransformationMatrix();
}
glm::mat4 GetTransformationMatrix() const {
return transMat;
}
private:
glm::vec3 pos, scale;
glm::quat rot;
glm::mat4 transMat;
void RecalculateTransformationMatrix();
};
}