2 #include "input_handler.hpp"
7 using namespace dragonblocks;
9 void InputHandler::processInput(double dtime)
11 processMouseInput(dtime);
12 processKeyInput(dtime);
15 void InputHandler::processMouseInput(double dtime)
17 vec2 cursor_delta = vec2(mouse_sensitivity * dtime) * (vec2)window->getCursorDelta();
18 onMouseMove(dtime, cursor_delta.x, cursor_delta.y);
21 void InputHandler::processKeyInput(double dtime)
23 map<int, bool> keysDown;
24 for (auto it = listened_keys.begin(); it != listened_keys.end(); it++) {
25 if (window->wasKeyDown(it->first)) {
26 keysDown[it->first] = true;
29 onKeyPress(dtime, keysDown);
32 void InputHandler::onMouseMove(double dtime, double x, double y)
36 camera->update(yaw, pitch);
39 void InputHandler::onKeyPress(double dtime, map<int, bool> keysDown)
41 vec3 vel = vec3(speed * dtime);
42 vec3 front = camera->front(), right = camera->right(), up = camera->up();
44 front = normalize(vec3(front.x, 0, front.z));
45 up = normalize(vec3(0, up.y, 0));
47 if (keysDown[GLFW_KEY_W]) {
48 camera->pos += vel * front;
49 } else if (keysDown[GLFW_KEY_S]) {
50 camera->pos -= vel * front;
52 if (keysDown[GLFW_KEY_D]) {
53 camera->pos += vel * right;
54 } else if (keysDown[GLFW_KEY_A]) {
55 camera->pos -= vel * right;
57 if (keysDown[GLFW_KEY_SPACE]) {
58 camera->pos += vel * up;
59 } else if (keysDown[GLFW_KEY_LEFT_SHIFT]) {
60 camera->pos -= vel * up;
64 void InputHandler::listenFor(int key)
66 listened_keys[key] = true;
69 void InputHandler::dontListenFor(int key)
71 listened_keys.erase(key);
74 InputHandler::InputHandler(Camera *c, Window *w) : camera(c), window(w)
76 listenFor(GLFW_KEY_W);
77 listenFor(GLFW_KEY_A);
78 listenFor(GLFW_KEY_S);
79 listenFor(GLFW_KEY_D);
80 listenFor(GLFW_KEY_SPACE);
81 listenFor(GLFW_KEY_LEFT_SHIFT);