184 lines
3.5 KiB
C++
184 lines
3.5 KiB
C++
|
|
#define JXINPUT_MAX_AXES 8
|
|
#define JXINPUT_MAX_BUTTONS 256
|
|
#define JXINPUT_MAX_DIRECTIONALS 4
|
|
|
|
|
|
/**
|
|
* This class will be exported by jxinput.dll.
|
|
*/
|
|
class JXINPUT_API JXInput
|
|
{
|
|
|
|
public:
|
|
|
|
typedef enum AXISTYPE
|
|
{
|
|
TYPE_TRANSLATION,
|
|
TYPE_ROTATION,
|
|
TYPE_SLIDER
|
|
};
|
|
|
|
typedef enum BUTTONTYPE
|
|
{
|
|
TYPE_PUSHBUTTON,
|
|
TYPE_TOGGLEBUTTON
|
|
};
|
|
|
|
typedef enum AXISID
|
|
{
|
|
ID_X, ID_Y, ID_Z,
|
|
ID_ROTX, ID_ROTY, ID_ROTZ,
|
|
ID_SLIDER0, ID_SLIDER1
|
|
};
|
|
|
|
|
|
//
|
|
// Ctor
|
|
//
|
|
JXInput( LPDIRECTINPUTDEVICE8 pJoystick, HWND hWnd = NULL );
|
|
|
|
//
|
|
// Dtor
|
|
//
|
|
virtual ~JXInput();
|
|
|
|
//
|
|
// Operational methods
|
|
//
|
|
void update();
|
|
|
|
// Ask for the name
|
|
TCHAR * const getName() const;
|
|
|
|
//
|
|
// Numbering methods
|
|
//
|
|
int getNumberOfAxes() const;
|
|
int getNumberOfButtons() const;
|
|
int getNumberOfDirectionals() const;
|
|
|
|
|
|
//
|
|
// Access axes
|
|
//
|
|
double getX() const; /** -1.0 .... 1.0 */
|
|
double getY() const; /** -1.0 .... 1.0 */
|
|
double getZ() const; /** -1.0 .... 1.0 */
|
|
double getRotX() const; /** -1.0 .... 1.0 */
|
|
double getRotY() const; /** -1.0 .... 1.0 */
|
|
double getRotZ() const; /** -1.0 .... 1.0 */
|
|
double getSlider0() const; /** 0.0 .... 1.0 */
|
|
double getSlider1() const; /** 0.0 .... 1.0 */
|
|
|
|
|
|
//
|
|
// Axis methods
|
|
//
|
|
bool isAxisAvailable( int idx ) const;
|
|
TCHAR* const getAxisName( int idx ) const;
|
|
int getAxisType( int idx ) const;
|
|
double getAxisValue( int idx ) const;
|
|
|
|
//
|
|
// Button methods
|
|
//
|
|
bool isButtonAvailable( int idx ) const;
|
|
TCHAR* const getButtonName( int idx ) const;
|
|
int getButtonType( int idx ) const;
|
|
bool isButtonDown( int idx ) const;
|
|
|
|
//
|
|
// Directional methods
|
|
//
|
|
bool isDirectionalAvailable( int idx ) const;
|
|
TCHAR* const getDirectionalName( int idx ) const;
|
|
int getDirection( int idx ) const;
|
|
|
|
private://-----------------------------------------------------------------------------------------
|
|
LPDIRECTINPUTDEVICE8 mpJoystick;
|
|
|
|
DIDEVICEINSTANCE mdiDevInfo;
|
|
DIDEVCAPS mdiDevCaps;
|
|
DIJOYSTATE2 mJS; // DInput joystick state
|
|
|
|
int mSliderCount;
|
|
int mPOVCount;
|
|
int mButtonCount;
|
|
|
|
double getAxisValueHelper( LONG val, int idx ) const;
|
|
|
|
HRESULT SwitchAutoCenter( bool onoff = true );
|
|
|
|
HRESULT InitDirectInput( HWND hWnd = NULL );
|
|
HRESULT FreeDirectInput();
|
|
HRESULT UpdateInputState();
|
|
|
|
|
|
static BOOL CALLBACK EnumAxesCallback
|
|
(
|
|
const DIDEVICEOBJECTINSTANCE* pdidoi,
|
|
VOID* pContext
|
|
);
|
|
|
|
static BOOL CALLBACK EnumButtonsCallback
|
|
(
|
|
const DIDEVICEOBJECTINSTANCE* pdidoi,
|
|
VOID* pContext
|
|
);
|
|
|
|
static BOOL CALLBACK EnumPOVsCallback
|
|
(
|
|
const DIDEVICEOBJECTINSTANCE* pdidoi,
|
|
VOID* pContext
|
|
);
|
|
|
|
static BOOL CALLBACK EnumEffectsCallback
|
|
(
|
|
const DIEFFECTINFO* pdidoi,
|
|
VOID* pContext
|
|
);
|
|
|
|
|
|
class JXINPUT_API AxisConfig
|
|
{
|
|
|
|
public:
|
|
bool mIsAvailable;
|
|
CHAR mName[MAX_PATH];
|
|
AXISTYPE mType;
|
|
LONG mMinValue;
|
|
LONG mMaxValue;
|
|
double (JXInput::*mGetValueMethod)() const;
|
|
|
|
} mAxisConfig [ JXINPUT_MAX_AXES ];
|
|
|
|
void initAxisConfig();
|
|
|
|
|
|
class JXINPUT_API ButtonConfig
|
|
{
|
|
|
|
public:
|
|
bool mIsAvailable;
|
|
CHAR mName[MAX_PATH];
|
|
BUTTONTYPE mType;
|
|
|
|
} mButtonConfig[ JXINPUT_MAX_BUTTONS ];
|
|
|
|
void initButtonsConfig();
|
|
|
|
|
|
class JXINPUT_API DirectionalConfig
|
|
{
|
|
|
|
public:
|
|
bool mIsAvailable;
|
|
CHAR mName[MAX_PATH];
|
|
|
|
} mDirectionalConfig[ JXINPUT_MAX_DIRECTIONALS ];
|
|
|
|
void initDirectionalsConfig();
|
|
};
|
|
|