FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
JoystickInput.h
1#pragma once
2
29#include <cstddef>
30#include <cstdint>
31#include <vector>
32
33namespace Ship
34{
35namespace joystick
36{
37
39constexpr double kAxisMax = 32767.0;
40
43constexpr int kSliderAxisOffset = 5;
44
46enum HatBits : std::uint8_t
47{
48 kHatCentered = 0x00,
49 kHatUp = 0x01,
50 kHatRight = 0x02,
51 kHatDown = 0x04,
52 kHatLeft = 0x08,
53};
54
56enum class PovDirection
57{
58 Centered,
59 North,
60 South,
61 East,
62 West,
63 NorthEast,
64 NorthWest,
65 SouthEast,
66 SouthWest,
67};
68
71PovDirection HatToPov(std::uint8_t hat);
72
74inline double ScaleAxis(std::int16_t raw) { return static_cast<double>(raw) / kAxisMax; }
75
79{
80 std::vector<std::int16_t> axes;
81 std::vector<std::uint8_t> buttons;
82 std::vector<std::uint8_t> hats;
83
84 std::int16_t Axis(int i) const { return (i >= 0 && std::size_t(i) < axes.size()) ? axes[std::size_t(i)] : 0; }
85 bool Button(int i) const { return i >= 0 && std::size_t(i) < buttons.size() && buttons[std::size_t(i)] != 0; }
86 std::uint8_t Hat(int i) const { return (i >= 0 && std::size_t(i) < hats.size()) ? hats[std::size_t(i)] : kHatCentered; }
87
89 double ScaledAxis(int i) const { return ScaleAxis(Axis(i)); }
91 double ScaledSlider(int k) const { return ScaleAxis(Axis(kSliderAxisOffset + k)); }
92};
93
96{
97public:
98 virtual ~JoystickListener() = default;
100 virtual void ButtonPressed(int button, const JoystickState& state) { }
102 virtual void ButtonReleased(int button, const JoystickState& state) { }
104 virtual void AxisMoved(int axis, const JoystickState& state) { }
106 virtual void HatMoved(int hat, const JoystickState& state) { }
107};
108
115void DispatchChanges(const JoystickState& previous, const JoystickState& current, JoystickListener& listener);
116
117} // namespace joystick
118} // namespace Ship
Receives the changes between two joystick states, as an OIS JoyStickListener received events.
Definition JoystickInput.h:96
virtual void ButtonPressed(int button, const JoystickState &state)
Button button went down (OIS buttonPressed).
Definition JoystickInput.h:100
virtual void ButtonReleased(int button, const JoystickState &state)
Button button went up (OIS buttonReleased).
Definition JoystickInput.h:102
virtual void AxisMoved(int axis, const JoystickState &state)
SDL axis axis changed (OIS axisMoved, or sliderMoved for a slider axis).
Definition JoystickInput.h:104
virtual void HatMoved(int hat, const JoystickState &state)
Hat hat changed (OIS povMoved).
Definition JoystickInput.h:106
Simple waypoint object.
Definition CableAttach.h:16
Definition JoystickInput.h:79
double ScaledSlider(int k) const
The OIS slider k, scaled (mSliders[k].abX / MAX_AXIS); SDL axis kSliderAxisOffset + k.
Definition JoystickInput.h:91
double ScaledAxis(int i) const
The OIS axis i, scaled (mAxes[i].abs / MAX_AXIS).
Definition JoystickInput.h:89