45 lines
1.2 KiB
C++
45 lines
1.2 KiB
C++
#ifndef _H_CAMERA_H
|
|
#define _H_CAMERA_H
|
|
|
|
#include "gameplay/entity.h"
|
|
|
|
class Camera {
|
|
public:
|
|
Camera(float viewPortW, float viewPortH)
|
|
: position(glm::vec3(0.0f, 0.0f, 0.0f)),
|
|
front(glm::vec3(0.0f, 0.0f, -1.0f)), up(glm::vec3(0.0f, 1.0f, 0.0f)),
|
|
viewPortW(viewPortW), viewPortH(viewPortH) {};
|
|
|
|
void setPosition(const glm::vec3 &position) { this->position = position; }
|
|
|
|
const Entity *getTarget() const { return target; }
|
|
const glm::vec3 getCenterPos() const {
|
|
return glm::vec3(position.x + (viewPortW / 2.f),
|
|
position.y + (viewPortH / 2.f), 0.0f);
|
|
}
|
|
void setTarget(Entity *target) { this->target = target; }
|
|
void unsetTarget() { target = nullptr; }
|
|
bool isTargeting() { return (target != nullptr); }
|
|
|
|
void update(double deltaTime);
|
|
void setViewportSize(float width, float height);
|
|
|
|
const glm::vec3 worldToLocal(const glm::vec3 &worldCoordinates);
|
|
|
|
glm::mat4 getViewMatrix();
|
|
glm::mat4 getProjectionMatrix();
|
|
const glm::vec3 getPosition() const { return position; }
|
|
|
|
private:
|
|
Entity *target = nullptr;
|
|
|
|
glm::vec3 position;
|
|
glm::vec3 front;
|
|
glm::vec3 up;
|
|
|
|
float viewPortW, viewPortH;
|
|
|
|
float speed = 300.0f;
|
|
};
|
|
|
|
#endif // _H_CAMERA_H
|