]> git.lizzy.rs Git - dragonblocks3d.git/blob - src/dragonblocks/input_handler.cpp
beda411e2c39a99ce936d9b9b3fade748d2812f1
[dragonblocks3d.git] / src / dragonblocks / input_handler.cpp
1 #include "camera.hpp" 
2 #include "input_handler.hpp" 
3 #include "window.hpp" 
4
5 using namespace std;
6 using namespace glm;
7 using namespace dragonblocks;
8
9 void InputHandler::processInput(double dtime)
10 {
11         processMouseInput(dtime);
12         processKeyInput(dtime);
13 }
14
15 void InputHandler::processMouseInput(double dtime)
16 {
17         vec2 cursor_delta = vec2(mouse_sensitivity * dtime) * (vec2)window->getCursorDelta();
18         onMouseMove(dtime, cursor_delta.x, cursor_delta.y);
19 }
20
21 void InputHandler::processKeyInput(double dtime)
22 {
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;
27                 }
28         }
29         onKeyPress(dtime, keysDown);
30 }
31
32 void InputHandler::onMouseMove(double dtime, double x, double y)
33 {
34         yaw += x;
35         pitch -= y;
36         camera->update(yaw, pitch);
37 }
38
39 void InputHandler::onKeyPress(double dtime, map<int, bool> keysDown)
40 {
41         vec3 vel = vec3(speed * dtime);
42         vec3 front = camera->front(), right = camera->right(), up = camera->up();
43         if (! pitch_move) {
44                 front = normalize(vec3(front.x, 0, front.z));
45                 up = normalize(vec3(0, up.y, 0));
46         }
47         if (keysDown[GLFW_KEY_W]) {
48                 camera->pos += vel * front;
49         } else if (keysDown[GLFW_KEY_S]) {
50                 camera->pos -= vel * front;
51         }
52         if (keysDown[GLFW_KEY_D]) {
53                 camera->pos += vel * right;
54         } else if (keysDown[GLFW_KEY_A]) {
55                 camera->pos -= vel * right;
56         }
57         if (keysDown[GLFW_KEY_SPACE]) {
58                 camera->pos += vel * up;
59         } else if (keysDown[GLFW_KEY_LEFT_SHIFT]) {
60                 camera->pos -= vel * up;
61         }       
62 }
63
64 void InputHandler::listenFor(int key)
65 {
66         listened_keys[key] = true;
67 }
68
69 void InputHandler::dontListenFor(int key)
70 {
71         listened_keys.erase(key);
72 }
73
74 InputHandler::InputHandler(Camera *c, Window *w) : camera(c), window(w)
75 {
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);
82 }
83