Program Listing for File Camera.hpp

Return to documentation for file (engine/include/Cacao/Camera.hpp)

#pragma once

#include "glm/glm.hpp"

#include "EventManager.hpp"
#include "DllHelper.hpp"

namespace Cacao {
    class CACAO_API Camera {
      public:
        Camera()
          : resizeConsumer(std::bind(&Camera::ResizeProjectionMatrix, this, std::placeholders::_1)), clearColor(1) {
            EventManager::Get().SubscribeConsumer("WindowResize", resizeConsumer);
        }

        virtual ~Camera() {
            EventManager::Get().UnsubscribeConsumer("WindowResize", resizeConsumer);
        }

        virtual glm::vec3 GetPosition() const = 0;

        virtual void SetPosition(glm::vec3 pos) = 0;

        virtual glm::vec3 GetRotation() const = 0;

        virtual void SetRotation(glm::vec3 rot) = 0;

        virtual glm::mat4 GetProjectionMatrix() const = 0;

        virtual glm::mat4 GetViewMatrix() const = 0;

        virtual void ResizeProjectionMatrix(Event& e) = 0;

      private:
        EventConsumer resizeConsumer;

        glm::vec4 clearColor;
    };
}