FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
GenericGamepadInput.h
1#ifndef _CGENERICGAMEPADINPUT_H_
2#define _CGENERICGAMEPADINPUT_H_
3#include <memory>
4#include <string>
5#include <fhsim/simobject/SimObject.h>
6
7#include "JoystickInput.h"
8
83namespace Ship{
84 #ifdef FH_VISUALIZATION
85 namespace joystick { class SdlJoystickPoller; }
86 #endif
87
88 class GenericGamepadInput: public SimObject, public joystick::JoystickListener{
89 public:
90 enum button_index{
91 BUTTON1 = 0,//< Cross
92 BUTTON2, //< Circle
93 BUTTON3, //< Square
94 BUTTON4, //< Triangle
95 BUTTON5, //< L1
96 BUTTON6, //< R1
97 BUTTON7, //< Select
98 BUTTON8, //< Start
99 BUTTON9, //< Left analog button
100 BUTTON10, //< Right analog button
101 NUMBUTTON
102 };
103
104 enum axes_index{
105 XAXIS=0,//< Vertical left analog
106 YAXIS, //< Horizontal left analog
107 ZAXIS,// L2/R2
108 NUMAXIS
109 };
110
111 enum rotation_index{
112 ROTATION_X,// Vertical right analog
113 ROTATION_Y,// horizontal right analog
114 NUMROTATION
115 };
116
117 enum pov_index{
118 POV_VERTICAL,
119 POV_HORIZONTAL,
120 NUM_POV
121 };
122
123 GenericGamepadInput(const std::string simObjectName, ISimObjectCreator* const creator);
124 ~GenericGamepadInput() override;
125
126 void OdeFcn(const double T, const double *const X, double *const XDot) const;
127
128#ifdef FH_VISUALIZATION
129 virtual void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
130 virtual void RenderUpdate( const double T, const double* const X );
131 void RenderRelease() override;
132#endif
134
135 void ButtonPressed(int button, const joystick::JoystickState& state) override;
136 void ButtonReleased(int button, const joystick::JoystickState& state) override;
137 void AxisMoved(int axis, const joystick::JoystickState& state) override;
138 void HatMoved(int hat, const joystick::JoystickState& state) override;
140 const double *XAxis(const double T, const double* const X); ; //< Vertical left analog
141 const double *YAxis(const double T, const double* const X); ; //< Horizontal left analog
142 const double *ZAxis(const double T, const double* const X); ; // L2/R2
143 const double *XAxisrotation(const double T, const double* const X); ; // Vertical right analog
144 const double *YAxisrotation(const double T, const double* const X); ; // horizontal right analog
145
146 const double *POVVertical(const double T, const double* const X); ; // Vertical d-pad
147 const double *POVHorizontal(const double T, const double* const X); ; // horizontal d-pad
148
149 const double *XDotAxis(const double T, const double* const X); ; //< Vertical left analog
150 const double *YDotAxis(const double T, const double* const X); ; //< Horizontal left analog
151 const double *ZDotAxis(const double T, const double* const X); ; // L2/R2
152 const double *XDotAxisrotation(const double T, const double* const X); ; // Vertical right analog
153 const double *YDotAxisrotation(const double T, const double* const X); ; // horizontal right analog
154
155 const double *XIntAxis(const double T, const double* const X); ; //< Vertical left analog
156 const double *YIntAxis(const double T, const double* const X); ; //< Horizontal left analog
157 const double *ZIntAxis(const double T, const double* const X); ; // L2/R2
158 const double *XIntAxisrotation(const double T, const double* const X); ; // Vertical right analog
159 const double *YIntAxisrotation(const double T, const double* const X); ; // horizontal right analog
160 const double *POVIntVertical(const double T, const double* const X); ; // Vertical d-pad
161 const double *POVIntHorizontal(const double T, const double* const X); ; // horizontal d-pad
162
163 const double *Button1(const double T, const double* const X); //< Cross
164 const double *Button2(const double T, const double* const X); //< Circle
165 const double *Button3(const double T, const double* const X); //< Square
166 const double *Button4(const double T, const double* const X); //< Triangle
167 const double *Button5(const double T, const double* const X); //< L1
168 const double *Button6(const double T, const double* const X); //< R1
169 const double *Button7(const double T, const double* const X); //< Select
170 const double *Button8(const double T, const double* const X); //< Start
171 const double *Button9(const double T, const double* const X); //< Left analog button
172 const double *Button10(const double T, const double* const X);//< Right analog button
173
174 const double *AxisVector(const double T, const double* const X); ; //< Vertical left analog
175 const double *RotationVector(const double T, const double* const X); ; //< Vertical left analog
176 const double *ButtonVector(const double T, const double* const X); ; //< Vertical left analog
177
178 private:
179 bool m_stickButtons;
180 double m_invertVertical;
181
182 double m_axis[NUMAXIS];
183 double m_dotAxis[NUMAXIS];
184 double m_intAxis[NUMAXIS];
185 int m_stateAxis[NUMAXIS];
186 double m_rotation[NUMROTATION];
187 double m_dotRotation[NUMROTATION];
188 double m_intRotation[NUMROTATION];
189 int m_stateRotation[NUMROTATION];
190 double m_button[NUMBUTTON];
191 double m_pov[NUM_POV];
192 int m_statePov[NUM_POV];
193
194#ifdef FH_VISUALIZATION
195 std::unique_ptr<joystick::SdlJoystickPoller> m_joystick;
196#endif
197 };
198}
199#endif
Definition GenericGamepadInput.h:88
void AxisMoved(int axis, const joystick::JoystickState &state) override
SDL axis axis changed (OIS axisMoved, or sliderMoved for a slider axis).
void HatMoved(int hat, const joystick::JoystickState &state) override
Hat hat changed (OIS povMoved).
void ButtonReleased(int button, const joystick::JoystickState &state) override
Button button went up (OIS buttonReleased).
void ButtonPressed(int button, const joystick::JoystickState &state) override
Button button went down (OIS buttonPressed).
Receives the changes between two joystick states, as an OIS JoyStickListener received events.
Definition JoystickInput.h:96
Simple waypoint object.
Definition CableAttach.h:58
Definition JoystickInput.h:79