51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef JOYSTICK_HEADER
-#define JOYSTICK_HEADER
+#pragma once
#include "irrlichttypes_extrabloated.h"
#include "keys.h"
struct JoystickButtonCmb : public JoystickCombination {
- JoystickButtonCmb() {}
+ JoystickButtonCmb() = default;
+
JoystickButtonCmb(GameKeyType key, u32 filter_mask, u32 compare_mask) :
filter_mask(filter_mask),
compare_mask(compare_mask)
this->key = key;
}
+ virtual ~JoystickButtonCmb() = default;
+
virtual bool isTriggered(const irr::SEvent::SJoystickEvent &ev) const;
u32 filter_mask;
struct JoystickAxisCmb : public JoystickCombination {
- JoystickAxisCmb() {}
+ JoystickAxisCmb() = default;
+
JoystickAxisCmb(GameKeyType key, u16 axis_to_compare, int direction, s16 thresh) :
axis_to_compare(axis_to_compare),
direction(direction),
this->key = key;
}
- virtual bool isTriggered(const irr::SEvent::SJoystickEvent &ev) const;
+ virtual ~JoystickAxisCmb() = default;
+
+ bool isTriggered(const irr::SEvent::SJoystickEvent &ev) const override;
u16 axis_to_compare;
std::vector<JoystickButtonCmb> button_keys;
std::vector<JoystickAxisCmb> axis_keys;
JoystickAxisLayout axes[JA_COUNT];
- s16 axes_dead_border;
+ s16 axes_deadzone;
};
class JoystickController {
public:
JoystickController();
+
+ void onJoystickConnect(const std::vector<irr::SJoystickInfo> &joystick_infos);
+
bool handleEvent(const irr::SEvent::SJoystickEvent &ev);
void clear();
bool wasKeyDown(GameKeyType b)
{
- bool r = m_past_pressed_keys[b];
- m_past_pressed_keys[b] = false;
+ bool r = m_past_keys_pressed[b];
+ m_past_keys_pressed[b] = false;
return r;
}
- bool getWasKeyDown(GameKeyType b)
+
+ bool wasKeyReleased(GameKeyType b)
{
- return m_past_pressed_keys[b];
+ return m_keys_released[b];
}
- void clearWasKeyDown(GameKeyType b)
+ void clearWasKeyReleased(GameKeyType b)
{
- m_past_pressed_keys[b] = false;
+ m_keys_released[b] = false;
}
- bool wasKeyReleased(GameKeyType b)
+ bool wasKeyPressed(GameKeyType b)
{
- bool r = m_past_released_keys[b];
- m_past_released_keys[b] = false;
- return r;
+ return m_keys_pressed[b];
}
- bool getWasKeyReleased(GameKeyType b)
+ void clearWasKeyPressed(GameKeyType b)
{
- return m_past_pressed_keys[b];
- }
- void clearWasKeyReleased(GameKeyType b)
- {
- m_past_pressed_keys[b] = false;
+ m_keys_pressed[b] = false;
}
bool isKeyDown(GameKeyType b)
{
- return m_pressed_keys[b];
+ return m_keys_down[b];
}
s16 getAxis(JoystickAxis axis)
f32 doubling_dtime;
private:
- const JoystickLayout *m_layout;
+ void setLayoutFromControllerName(const std::string &name);
+
+ JoystickLayout m_layout;
s16 m_axes_vals[JA_COUNT];
- std::bitset<KeyType::INTERNAL_ENUM_COUNT> m_pressed_keys;
+ u8 m_joystick_id = 0;
+
+ std::bitset<KeyType::INTERNAL_ENUM_COUNT> m_keys_down;
+ std::bitset<KeyType::INTERNAL_ENUM_COUNT> m_keys_pressed;
f32 m_internal_time;
f32 m_past_pressed_time[KeyType::INTERNAL_ENUM_COUNT];
- std::bitset<KeyType::INTERNAL_ENUM_COUNT> m_past_pressed_keys;
- std::bitset<KeyType::INTERNAL_ENUM_COUNT> m_past_released_keys;
+ std::bitset<KeyType::INTERNAL_ENUM_COUNT> m_past_keys_pressed;
+ std::bitset<KeyType::INTERNAL_ENUM_COUNT> m_keys_released;
};
-
-#endif