28 #define _WIN32_WINDOWS 0x0501
29 #define _WIN32_WINNT 0x0501
30 #include <SFML/Window/Joystick.hpp>
42 void Joystick::Initialize(
unsigned int Index)
45 myIndex = JOYSTICKID1;
47 myIsConnected =
false;
48 myHasContinuousPOV =
false;
49 for (
int i = 0; i < Joy::AxisCount; ++i)
55 JoyInfo.dwSize =
sizeof(JoyInfo);
56 JoyInfo.dwFlags = JOY_RETURNALL;
57 for (
unsigned int NbFound = 0; (Error = joyGetPosEx(myIndex, &JoyInfo)) != JOYERR_PARMS; myIndex++)
60 if (Error == JOYERR_NOERROR)
68 joyGetDevCaps(myIndex, &Caps,
sizeof(Caps));
69 myNbButtons = Caps.wNumButtons;
73 myAxes[Joy::AxisX] =
true;
74 myAxes[Joy::AxisY] =
true;
75 myAxes[Joy::AxisZ] = (Caps.wCaps & JOYCAPS_HASZ) != 0;
76 myAxes[Joy::AxisR] = (Caps.wCaps & JOYCAPS_HASR) != 0;
77 myAxes[Joy::AxisU] = (Caps.wCaps & JOYCAPS_HASU) != 0;
78 myAxes[Joy::AxisV] = (Caps.wCaps & JOYCAPS_HASV) != 0;
79 myAxes[Joy::AxisPOV] = (Caps.wCaps & JOYCAPS_HASPOV) != 0;
80 myHasContinuousPOV = (Caps.wCaps & JOYCAPS_POVCTS) != 0;
95 JoystickState Joystick::UpdateState()
103 if (joyGetDevCaps(myIndex, &Caps,
sizeof(Caps)) == JOYERR_NOERROR)
107 Pos.dwFlags = JOY_RETURNX | JOY_RETURNY | JOY_RETURNZ | JOY_RETURNR | JOY_RETURNU | JOY_RETURNV | JOY_RETURNBUTTONS;
108 Pos.dwFlags |= myHasContinuousPOV ? JOY_RETURNPOVCTS : JOY_RETURNPOV;
109 Pos.dwSize =
sizeof(JOYINFOEX);
110 if (joyGetPosEx(myIndex, &Pos) == JOYERR_NOERROR)
113 State.Axis[Joy::AxisX] = (Pos.dwXpos - (Caps.wXmax + Caps.wXmin) / 2.f) * 200.f / (Caps.wXmax - Caps.wXmin);
114 State.Axis[Joy::AxisY] = (Pos.dwYpos - (Caps.wYmax + Caps.wYmin) / 2.f) * 200.f / (Caps.wYmax - Caps.wYmin);
115 State.Axis[Joy::AxisZ] = (Pos.dwZpos - (Caps.wZmax + Caps.wZmin) / 2.f) * 200.f / (Caps.wZmax - Caps.wZmin);
116 State.Axis[Joy::AxisR] = (Pos.dwRpos - (Caps.wRmax + Caps.wRmin) / 2.f) * 200.f / (Caps.wRmax - Caps.wRmin);
117 State.Axis[Joy::AxisU] = (Pos.dwUpos - (Caps.wUmax + Caps.wUmin) / 2.f) * 200.f / (Caps.wUmax - Caps.wUmin);
118 State.Axis[Joy::AxisV] = (Pos.dwVpos - (Caps.wVmax + Caps.wVmin) / 2.f) * 200.f / (Caps.wVmax - Caps.wVmin);
121 if (Pos.dwPOV != 0xFFFF)
122 State.Axis[Joy::AxisPOV] = Pos.dwPOV / 100.f;
124 State.Axis[Joy::AxisPOV] = -1.f;
127 for (
unsigned int i = 0; i < GetButtonsCount(); ++i)
128 State.Buttons[i] = (Pos.dwButtons & (1 << i)) != 0;
140 bool Joystick::HasAxis(Joy::Axis Axis)
const
149 unsigned int Joystick::GetButtonsCount()
const
Total number of supported joystick buttons.