forked from cyberintruder/DGIPyDrOneQt
-
Notifications
You must be signed in to change notification settings - Fork 0
/
xinputGamepad.h
88 lines (68 loc) · 1.58 KB
/
xinputGamepad.h
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
/*
* xinputGamepad - extract of XInput class
* copyright (c) 2011-2012, fluxrobotics
*/
#ifndef H_XINPUT_GAMEPAD_H
#define H_XINPUT_GAMEPAD_H
#include "SFML/Window.hpp"
class XInput
{
private:
bool m_f_haveJoystick;
bool m_joyKeyState[32];
// axes - vertical, horizontal, rotation, throttle
float m_vert, m_horz, m_rZ, m_throttle;
int m_joystickId;
float getScaledAxis(sf::Joystick::Axis axisName)
{
if (!m_f_haveJoystick)
return 0.0f;
// scaling value. This is done to limit output below absolute value 1.0f
const float JOYSTICK_SCALE = 1.0f/100.000001f;
return sf::Joystick::getAxisPosition(m_joystickId,axisName)*JOYSTICK_SCALE;
}
static const sf::Joystick::Axis mapAxesNums[];
public:
bool initInput(int joystickId = 0);
bool updateState();
bool releaseInput();
explicit XInput() : m_f_haveJoystick(false)
{
}
virtual ~XInput()
{
releaseInput();
}
bool haveJoystick() { return m_f_haveJoystick; }
bool isKeyPressed(int key)
{
if (key < 32) return m_joyKeyState[key];
return false;
}
// Normalized outputs are all FLOAT in range [-1.0f to 1.0f]
float getHorizontal()
{
return m_horz;
}
float getVertical()
{
return m_vert;
}
float getRotationZ()
{
return m_rZ;
}
float getThrottle()
{
return m_throttle;
}
int getRawAxisCount();
float getRawAxis(int axis_id)
{
if (axis_id < getRawAxisCount())
return this->getScaledAxis(mapAxesNums[axis_id]);
else
return 0.0f;
}
};
#endif