diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2021-01-28 18:51:30 +0000 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2021-01-28 18:51:30 +0000 |
commit | 235f128136c7c23a64fa5f0424edf05879b8ee9b (patch) | |
tree | f703d173de2e55fdbdf9723cc5993df63bcff200 /application/manualCameraController.cpp | |
parent | Generate some random terrain with a water layer (diff) | |
download | ilt-235f128136c7c23a64fa5f0424edf05879b8ee9b.tar.bz2 ilt-235f128136c7c23a64fa5f0424edf05879b8ee9b.tar.xz ilt-235f128136c7c23a64fa5f0424edf05879b8ee9b.zip |
Input stack and logical split of camera controller
Diffstat (limited to 'application/manualCameraController.cpp')
-rw-r--r-- | application/manualCameraController.cpp | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/application/manualCameraController.cpp b/application/manualCameraController.cpp new file mode 100644 index 0000000..36f3312 --- /dev/null +++ b/application/manualCameraController.cpp @@ -0,0 +1,65 @@ +#include "manualCameraController.h" +#include <gfx/gl/camera.h> +#include <gfx/gl/shader.h> + +bool +ManualCameraController::handleInput(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) { + motion = e.motion; + } + return true; + } + return false; +} + +void +ManualCameraController::updateCamera(Camera * camera, Shader * shader) const +{ + if (motion) { + if (ctrl) { + camera->RotateY(-0.01F * motion->xrel); + camera->Pitch(-0.01F * motion->yrel); + } + else { + camera->MoveRight(motion->xrel); + camera->SlideForward(motion->yrel); + } + shader->setView(camera->GetViewProjection()); + motion.reset(); + } +} |