game-engine/include/myEngine/object.hpp

55 lines
1.5 KiB
C++

#ifndef OBJECT_HPP
#define OBJECT_HPP
#include <myEngine/model.hpp>
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
class Object {
public:
Model& model;
glm::vec3 position;
glm::vec3 scale;
glm::vec3 rotation;
glm::vec3 acceleration;
Object(Model &model, glm::vec3 position, glm::vec3 scale, glm::vec3 rotation) : model(model), position(position), scale(scale), rotation(rotation) {}
glm::mat4 getModelMatrix() const {
glm::mat4 model = glm::mat4(1.0f);
model = glm::translate(model, position);
model = glm::scale(model, scale);
model = glm::rotate(model, glm::radians(rotation.x), glm::vec3(1.0f, 0.0f, 0.0f));
model = glm::rotate(model, glm::radians(rotation.y), glm::vec3(0.0f, 1.0f, 0.0f));
model = glm::rotate(model, glm::radians(rotation.z), glm::vec3(0.0f, 0.0f, 1.0f));
return model;
}
void setPosition(const glm::vec3 &newPosition) {
position = newPosition;
}
void setScale(const glm::vec3 &newScale) {
scale = newScale;
}
void setRotation(const glm::vec3 &newRotation) {
rotation = newRotation;
}
void setAcceleration(const glm::vec3 &newAcceleration) {
acceleration = newAcceleration;
}
void Draw(Shader &shader, float deltaTime) {
position += acceleration * deltaTime;
acceleration = glm::vec3(0.0f, 0.0f, 0.0f);
glm::mat4 modelMatrix = getModelMatrix();
shader.setMat4("model", modelMatrix);
model.Draw(shader);
}
};
#endif