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)
24 for (auto it = listened_keys.begin(); it != listened_keys.end(); it++) {
26 if (window->wasKeyDown(key)) {
30 onKeyPress(dtime, keysDown);
33 void InputHandler::onMouseMove(double dtime, double x, double y)
37 pitch = clamp(pitch, -89.0, 89.0);
38 camera->update(yaw, pitch);
41 void InputHandler::onKeyPress(double dtime, set<int> keys)
43 vec3 vel = vec3(speed * dtime);
44 vec3 front = camera->front(), right = camera->right(), up = camera->up();
46 front = normalize(vec3(front.x, 0, front.z));
47 up = normalize(vec3(0, up.y, 0));
49 if (keys.find(GLFW_KEY_W) != keys.end()) {
50 camera->pos += vel * front;
51 } else if (keys.find(GLFW_KEY_S) != keys.end()) {
52 camera->pos -= vel * front;
54 if (keys.find(GLFW_KEY_D) != keys.end()) {
55 camera->pos += vel * right;
56 } else if (keys.find(GLFW_KEY_A) != keys.end()) {
57 camera->pos -= vel * right;
59 if (keys.find(GLFW_KEY_SPACE) != keys.end()) {
60 camera->pos += vel * up;
61 } else if (keys.find(GLFW_KEY_LEFT_SHIFT) != keys.end()) {
62 camera->pos -= vel * up;
66 void InputHandler::listenFor(int key)
68 listened_keys.insert(key);
71 void InputHandler::dontListenFor(int key)
73 listened_keys.erase(key);
76 InputHandler::InputHandler(Camera *c, Window *w) : camera(c), window(w)
78 listenFor(GLFW_KEY_W);
79 listenFor(GLFW_KEY_A);
80 listenFor(GLFW_KEY_S);
81 listenFor(GLFW_KEY_D);
82 listenFor(GLFW_KEY_SPACE);
83 listenFor(GLFW_KEY_LEFT_SHIFT);