87 lines
1.7 KiB
C++
87 lines
1.7 KiB
C++
#pragma once
|
|
|
|
#ifndef DIRECTINPUT_VERSION
|
|
#define DIRECTINPUT_VERSION 0x0800
|
|
#endif
|
|
|
|
#include <dinput.h>
|
|
#include "CXDirectXInput.h"
|
|
|
|
enum ENUM_JOYSTICK_BUTTON
|
|
{
|
|
BUTTON_X_AXIS_LOCK=0,
|
|
BUTTON_Y_AXIS_LOCK=1,
|
|
BUTTON_Z_AXIS_LOCK=2,
|
|
BUTTON_ROTATETABLE_REFLECTOR=3,
|
|
BUTTON_RESERVED_1=4,
|
|
BUTTON_LASER_PEN=5,
|
|
BUTTON_SPEED_PLUS=6,
|
|
BUTTON_SPEED_MINUS=7,
|
|
BUTTON_MAX=8
|
|
};
|
|
|
|
enum ENUM_BUTTON_STATE
|
|
{
|
|
BUTTON_STATE_RELEASE=0,
|
|
BUTTON_STATE_PRESS=1
|
|
};
|
|
|
|
struct ENUM_JOYSTICK_BUTTON_STATE
|
|
{
|
|
ENUM_BUTTON_STATE buttonState;
|
|
BYTE lastValue;
|
|
};
|
|
|
|
enum ENUM_MOVE_STATE
|
|
{
|
|
MOVE_STATE_NONE=0,
|
|
MOVE_STATE_ROTATETABLE_CLOCKWISE,
|
|
MOVE_STATE_ROTATETABLE_ANTICLOCKWISE,
|
|
MOVE_STATE_REFLECTOR_LEFT,
|
|
MOVE_STATE_REFLECTOR_RIGHT,
|
|
MOVE_STATE_X_AXIS_LEFT,
|
|
MOVE_STATE_X_AXIS_RIGHT,
|
|
MOVE_STATE_Y_AXIS_UP,
|
|
MOVE_STATE_Y_AXIS_DOWN,
|
|
MOVE_STATE_Z_AXIS_UP,
|
|
MOVE_STATE_Z_AXIS_DOWN
|
|
};
|
|
|
|
struct JoystickControlState
|
|
{
|
|
ENUM_JOYSTICK_BUTTON_STATE joystickButtonStates[BUTTON_MAX];
|
|
int joystickSpeed;
|
|
};
|
|
|
|
class HSI_Joystick
|
|
{
|
|
public:
|
|
|
|
HSI_Joystick(LPVOID ptr);
|
|
~HSI_Joystick();
|
|
|
|
public:
|
|
HANDLE m_hSuspendEvent;
|
|
HANDLE m_ResumeEvent;
|
|
HANDLE m_hExitEvent;
|
|
HANDLE m_hExitNotifyEvent;
|
|
HANDLE handles[2];
|
|
ENUM_JOYSTICK_BUTTON_STATE joystickButtonStates[BUTTON_MAX];
|
|
int joystickSpeed;
|
|
JoystickControlState *joystickControlState;
|
|
ENUM_BUTTON_STATE laserPenLastState;
|
|
void UpdateJosstickData();
|
|
void SuspendJoyStickThread();
|
|
void ResumeJoyStickThread();
|
|
void SendJoystickControlState();
|
|
private:
|
|
bool m_bEnableJoyStick;
|
|
CXDirectXInput *m_pXDirectInput;
|
|
ENUM_MOVE_STATE m_eMoveState;
|
|
HANDLE m_hJoyStickThread;
|
|
|
|
void CreateJoyStickThread();
|
|
void DestoryJoyStickThread();
|
|
};extern HSI_Joystick *g_pHSI_JoyStick;
|
|
|