2022-10-08 00:14:45 +02:00

84 lines
1.5 KiB
C++

#pragma once
#include <glm/glm.hpp>
#include <glm/gtx/quaternion.hpp>
namespace kek {
class Object {
public:
virtual ~Object() {};
virtual void translate(glm::vec3 delta) = 0;
virtual void translateX(float delta);
virtual void translateY(float delta);
virtual void translateZ(float delta);
virtual void moveTo(glm::vec3 position) = 0;
virtual glm::vec3 getPosition() = 0;
};
class DefaultObject: public Object {
protected:
glm::vec3 position;
public:
DefaultObject();
virtual ~DefaultObject() {};
virtual void translate(glm::vec3 delta);
virtual void moveTo(glm::vec3 position);
virtual glm::vec3 getPosition();
};
class RotateableObject: public Object {
public:
virtual ~RotateableObject() {};
virtual void rotate(float angle, glm::vec3 axis) = 0;
virtual void lookAt(glm::vec3 direction) = 0;
virtual void lookAtPos(glm::vec3 position);
virtual glm::quat getRotation() = 0;
};
class DefaultRotateableObject: public RotateableObject, public DefaultObject {
protected:
glm::quat rotation;
public:
DefaultRotateableObject();
virtual ~DefaultRotateableObject() {};
virtual void rotate(float angle, glm::vec3 axis);
virtual void lookAt(glm::vec3 direction);
virtual glm::quat getRotation();
virtual void translate(glm::vec3 delta) { DefaultObject::translate(delta); }
virtual void moveTo(glm::vec3 position) { DefaultObject::moveTo(position); };
virtual glm::vec3 getPosition() { return DefaultObject::getPosition(); };
};
}