diff options
Diffstat (limited to 'src/game/client/io/gamepad.hh')
| -rw-r--r-- | src/game/client/io/gamepad.hh | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/game/client/io/gamepad.hh b/src/game/client/io/gamepad.hh new file mode 100644 index 0000000..9c56894 --- /dev/null +++ b/src/game/client/io/gamepad.hh @@ -0,0 +1,50 @@ +#pragma once + +namespace io +{ +constexpr static int INVALID_GAMEPAD_AXIS = INT_MAX; +constexpr static int INVALID_GAMEPAD_BUTTON = INT_MAX; +} // namespace io + +namespace config +{ +class Boolean; +class Float; +} // namespace config + +struct GLFWgamepadstate; + +namespace io::gamepad +{ +extern bool available; +extern config::Float deadzone; +extern config::Boolean active; +extern GLFWgamepadstate state; +extern GLFWgamepadstate last_state; +} // namespace io::gamepad + +namespace io::gamepad +{ +void init(void); +void update_late(void); +} // namespace io::gamepad + +namespace io +{ +// This simulates buttons using axes. When an axis +// value exceeds 1.5 times the deadzone, the event is +// queued with a GLFW_PRESS action, when it falls back +// below the threshold, the event is queued with GLFW_RELEASE action +struct GamepadAxisEvent final { + int action; + int axis; +}; + +// This smears GLFW event sugar over gamepad polling +// system. Whenever it detects a state change, the event +// is queued with an appropriate action +struct GamepadButtonEvent final { + int action; + int button; +}; +} // namespace io |
