-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathgameEventHandler.cpp
More file actions
108 lines (89 loc) · 3.32 KB
/
gameEventHandler.cpp
File metadata and controls
108 lines (89 loc) · 3.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include "gameEventHandler.hpp"
#include "core/input.hpp"
#define MOUSE_OFFSET Input::NUM_KEYS
void GameEventHandler::onKeyDown(uint32 keyCode, bool isRepeat)
{
updateInput(keyCode, 1.0f, isRepeat);
}
void GameEventHandler::onKeyUp(uint32 keyCode, bool isRepeat)
{
updateInput(keyCode, -1.0f, isRepeat);
}
void GameEventHandler::onMouseDown(uint32 mouseButton, uint8 numClicks)
{
updateInput(mouseButton+MOUSE_OFFSET, 1.0f, false);
}
void GameEventHandler::onMouseUp(uint32 mouseButton, uint8 numClicks)
{
updateInput(mouseButton+MOUSE_OFFSET, -1.0f, false);
}
void GameEventHandler::onMouseMove(int32 mousePosX, int32 mousePosY,
int32 deltaX, int32 deltaY) {}
void GameEventHandler::addKeyControl(uint32 keyCode, InputControl& inputControl, float weight)
{
inputs[keyCode].push_back(std::pair<float, InputControl&>(weight, inputControl));
}
void GameEventHandler::addMouseControl(uint32 mouseButton, InputControl& inputControl, float weight)
{
inputs[mouseButton+MOUSE_OFFSET].push_back(std::pair<float, InputControl&>(weight, inputControl));
}
void GameEventHandler::updateInput(uint32 inputCode, float dir, bool isRepeat)
{
if(isRepeat) {
return;
}
for(uint32 i = 0; i < inputs[inputCode].size(); i++) {
inputs[inputCode][i].second.addAmt(inputs[inputCode][i].first * dir);
}
}
void GameEventHandler::addController(uint32 controllerID) {
controllers[controllerID].id=controllerID;
}
int32 GameEventHandler::onControllerAdded() {
int32 o=-1;
for(auto& c:controllers)
if(!c.second.connected){
c.second.connected=true;
return c.second.id;
}
return o;
}
void GameEventHandler::onControllerRemoved(int32 controllerID) {
controllers[controllerID].connected=false;
}
void GameEventHandler::addControllerButtonControl(uint32 controllerID,uint8 button, InputControl &inputControl, float weight) {
controllers[controllerID].buttons[button].push_back(std::pair<float, InputControl&>(weight, inputControl));
}
void
GameEventHandler::addControllerAxisControl(uint32 controllerID, uint8 axis, InputControl &inputControl, float weight) {
controllers[controllerID].axis[axis].inputs.push_back(std::pair<float, InputControl&>(weight, inputControl));
controllers[controllerID].axis[axis].lastVal=0;
}
void GameEventHandler::updateControllerButton(int32 controllerID,uint8 button, float dir) {
for(uint32 i = 0; i < controllers[controllerID].buttons[button]
.size(); i++) {
controllers[controllerID]
.buttons[button][i]
.second
.addAmt(
controllers[controllerID]
.buttons[button][i]
.first * dir);
}
}
void GameEventHandler::onControllerUp(int32 controllerID, uint8 controllerButton) {
updateControllerButton(controllerID,controllerButton,1.0f);
}
void GameEventHandler::onControllerDown(int32 controllerID, uint8 controllerButton) {
updateControllerButton(controllerID,controllerButton,-1.0f);
}
void GameEventHandler::onControllerAxis(int32 controllerID, uint8 controllerAxis, int16 axisValue) {
int16 v=controllers[controllerID].axis[controllerAxis].lastVal;
float w=((float)(axisValue-v)+0.5f)/(32767.5f);
for(uint32 i = 0; i < controllers[controllerID].axis[controllerAxis].inputs.size(); i++){
controllers[controllerID].axis[controllerAxis].inputs[i].second.addAmt(
controllers[controllerID].axis[controllerAxis].inputs[i].first*w
);
}
controllers[controllerID].axis[controllerAxis].lastVal=axisValue;
}