]> git.lizzy.rs Git - dragonblocks3d.git/blob - src/dragonblocks/input_handler.cpp
6ac64c3b9ff62e3a25e4327ca0c50d3c388ea582
[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::listenFor(int key)
16 {
17         listened_keys.insert(key);
18 }
19
20 void InputHandler::dontListenFor(int key)
21 {
22         listened_keys.erase(key);
23 }
24
25 void InputHandler::addMouseHandler(void (*callback)(double, double, double))
26 {
27         mouse_handlers.insert(callback);
28 }
29
30 void InputHandler::removeMouseHandler(void (*callback)(double, double, double))
31 {
32         mouse_handlers.erase(callback);
33 }
34
35 void InputHandler::addKeyHandler(void (*callback)(double, set<int>))
36 {
37         key_handlers.insert(callback);
38 }
39
40 void InputHandler::removeKeyHandler(void (*callback)(double, set<int>))
41 {
42         key_handlers.erase(callback);
43 }
44
45 InputHandler::InputHandler(Window *w) : window(w)
46 {
47 }
48
49 void InputHandler::processMouseInput(double dtime)
50 {
51         vec2 cursor_delta = vec2(mouse_sensitivity * dtime) * (vec2)window->getCursorDelta();
52         double x, y;
53         x = cursor_delta.x;
54         y = cursor_delta.y;
55         if (x != 0 && y != 0) {
56                 for (auto it = mouse_handlers.begin(); it != mouse_handlers.end(); it++) {
57                         (**it)(dtime, x, y);
58                 }
59         }
60 }
61
62 void InputHandler::processKeyInput(double dtime)
63 {
64         set<int> keysDown;
65         for (auto it = listened_keys.begin(); it != listened_keys.end(); it++) {
66                 int key = *it;
67                 if (window->wasKeyDown(key)) {
68                         keysDown.insert(key);
69                 }
70         }
71         if (keysDown.begin() != keysDown.end()) {
72                 for (auto it = key_handlers.begin(); it != key_handlers.end(); it++) {
73                         (**it)(dtime, keysDown);
74                 }
75         }
76 }