#pragma once #ifndef DIRECTINPUT_VERSION #define DIRECTINPUT_VERSION 0x0800 #endif #include #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;