From 1686a01b6ae7467e71eac247078248de4a3b3423 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Mon, 13 Dec 2021 23:47:30 +0000 Subject: Refactor to start splitting out UI components --- ui/manualCameraController.cpp | 67 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 ui/manualCameraController.cpp (limited to 'ui/manualCameraController.cpp') diff --git a/ui/manualCameraController.cpp b/ui/manualCameraController.cpp new file mode 100644 index 0000000..1d3a067 --- /dev/null +++ b/ui/manualCameraController.cpp @@ -0,0 +1,67 @@ +#include "manualCameraController.h" +#include +#include +#include +#include + +bool +ManualCameraController::handleInput(const SDL_Event & e) +{ + switch (e.type) { + case SDL_KEYDOWN: + switch (e.key.keysym.sym) { + case SDLK_LCTRL: + case SDLK_RCTRL: + ctrl = true; + return true; + } + break; + case SDL_KEYUP: + switch (e.key.keysym.sym) { + case SDLK_LCTRL: + case SDLK_RCTRL: + ctrl = false; + return true; + } + break; + case SDL_MOUSEBUTTONDOWN: + switch (e.button.button) { + case SDL_BUTTON_RIGHT: + SDL_SetRelativeMouseMode(SDL_TRUE); + mrb = true; + return true; + } + break; + case SDL_MOUSEBUTTONUP: + switch (e.button.button) { + case SDL_BUTTON_RIGHT: + SDL_SetRelativeMouseMode(SDL_FALSE); + mrb = false; + return true; + } + break; + case SDL_MOUSEMOTION: + if (mrb) { + if (ctrl) { + direction -= 0.01F * static_cast(e.motion.xrel); + pitch = std::clamp(pitch - 0.01F * static_cast(e.motion.yrel), 0.1F, half_pi); + } + else { + focus += rotate_flat(-direction) * glm::vec2 {-e.motion.xrel, e.motion.yrel}; + } + } + return true; + case SDL_MOUSEWHEEL: + dist = std::clamp(dist - static_cast(e.wheel.y) * 4.F, 5.F, 200.F); + break; + } + return false; +} + +void +ManualCameraController::updateCamera(Camera * camera) const +{ + camera->forward = glm::normalize(sincosf(direction) ^ -sin(pitch)); + camera->pos = !focus + up * 3.F - (camera->forward * std::pow(dist, 1.3F)); + camera->up = up; +} -- cgit v1.2.3