summaryrefslogtreecommitdiff
path: root/application/manualCameraController.cpp
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2021-01-28 18:51:30 +0000
committerDan Goodliffe <dan@randomdan.homeip.net>2021-01-28 18:51:30 +0000
commit235f128136c7c23a64fa5f0424edf05879b8ee9b (patch)
treef703d173de2e55fdbdf9723cc5993df63bcff200 /application/manualCameraController.cpp
parentGenerate some random terrain with a water layer (diff)
downloadilt-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.cpp65
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();
+ }
+}