Program Listing for File E_CameraControler.hpp¶
↰ Return to documentation for file (gui/Entities/E_CameraControler.hpp)
#pragma once
#include <glm/gtc/matrix_transform.hpp>
#include "Demeter/Demeter.hpp"
#include "Demeter/Entity.hpp"
#include "Demeter/Renderer/Camera.hpp"
#include "SDL_mouse.h"
#include "SDL_scancode.h"
class E_CameraControler : public Dem::IEntity {
private:
static constexpr float vel = 5;
static constexpr float sensitivity = 0.5F;
static constexpr float zoomSpeed = 10.0F;
public:
bool Init(Dem::Demeter &) override
{
return true;
}
bool Update(Dem::Demeter &d) override
{
float dt = d.GetTime().GetDelta();
// Input handling
glm::vec3 position = d.camera.GetPosition();
if (d.GetInput().keys[SDL_SCANCODE_UP])
position += d.camera.GetFront() * dt * vel * zoomSpeed;
if (d.GetInput().keys[SDL_SCANCODE_DOWN])
position -= d.camera.GetFront() * dt * vel * zoomSpeed;
if (d.GetInput().keys[SDL_SCANCODE_LEFT])
position -=
glm::normalize(glm::cross(d.camera.GetFront(), d.camera.GetUp())) * dt
* vel;
if (d.GetInput().keys[SDL_SCANCODE_RIGHT])
position +=
glm::normalize(glm::cross(d.camera.GetFront(), d.camera.GetUp())) * dt
* vel;
if (d.GetInput().keys[SDL_SCANCODE_SPACE])
position += d.camera.GetUp() * dt * vel;
if (d.GetInput().keys[SDL_SCANCODE_LCTRL])
position -= d.camera.GetUp() * dt * vel;
d.camera.SetPosition(position);
float yaw = d.camera.GetYaw();
float pitch = d.camera.GetPitch();
if (d.GetInput().mouseButtons[SDL_BUTTON_MIDDLE]) {
if (d.GetInput().mouseX > 0)
yaw += 5.0F * d.GetInput().mouseDeltaX * dt * sensitivity;
if (d.GetInput().mouseX < 0)
yaw -= 5.0F * d.GetInput().mouseDeltaX * dt * sensitivity;
if (d.GetInput().mouseY > 0)
pitch -= 5.0F * d.GetInput().mouseDeltaY * dt * sensitivity;
if (d.GetInput().mouseY < 0)
pitch += 5.0F * d.GetInput().mouseDeltaY * dt * sensitivity;
d.camera.SetRotation(yaw, pitch);
}
// std::cout
// << std::fixed << std::setprecision(2) << "Camera: pos "
// << d.camera.GetPosition().x << ", " << d.camera.GetPosition().y << ",
// "
// << d.camera.GetPosition().z << "\t"
// << "| yaw " << yaw << "\t"
// << "| pitch " << pitch << "\t"
// << "| front " << d.camera.GetFront().x << ", " <<
// d.camera.GetFront().y
// << ", " << d.camera.GetFront().z << "\t"
// << "| dt " << dt << "\n";
return true;
}
bool Draw(Dem::Demeter &) override
{
return true;
}
};