Advertisement
musicm122

xbox360Controller.cpp

Aug 20th, 2013
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.70 KB | None | 0 0
  1. // This is the main DLL file.
  2. #include "XboxController.h"
  3.  
  4. XboxController::XboxController(GamePadIndex player)
  5. {
  6.     this->_playerIndex = player;
  7.     this->State.reset();
  8. }
  9.  
  10. XboxController::~XboxController(void)
  11. {
  12.     if(this->IsConnected())
  13.     {
  14.         XboxController::Vibrate(0,0);
  15.     }
  16. }
  17.  
  18. bool XboxController::IsConnected()
  19. {
  20.     //clean the state
  21.     memset(&_controllerState,0,sizeof(XINPUT_STATE));
  22.     //ZeroMemory(&_controllerState, sizeof(XINPUT_STATE));
  23.    
  24.     //Get the state
  25.     DWORD Result = XInputGetState(this->_playerIndex, &_controllerState);
  26.    
  27.     if(Result==ERROR_SUCCESS){
  28.         return true;
  29.     }
  30.     else
  31.     {
  32.         return false;
  33.     }
  34. }
  35.  
  36. void XboxController::Vibrate(int leftVal, int rightVal)
  37. {
  38.     //Create a vibration state
  39.     XINPUT_VIBRATION Vibration;
  40.     memset(&_controllerState, 0, sizeof(XINPUT_STATE));
  41.  
  42.     int leftVib = (int)(leftVal*65535.0f);
  43.     int rightVib = (int)(rightVal*65535.0f);
  44.  
  45.     Vibration.wLeftMotorSpeed = leftVib ;
  46.     Vibration.wRightMotorSpeed = rightVib ;
  47.  
  48.     //Vibrate Controller
  49.     XInputSetState((int)_controllerNumber, &Vibration);
  50. }
  51.  
  52. void XboxController::Update()
  53. {
  54.     State.reset();
  55.    
  56.     // The values of the Left and Right Triggers go from 0 to 255. We just convert them to 0.0f=>1.0f
  57.     if(_controllerState.Gamepad.bRightTrigger && _controllerState.Gamepad.bRightTrigger < XINPUT_GAMEPAD_TRIGGER_THRESHOLD)
  58.     {
  59.         State._right_trigger = _controllerState.Gamepad.bRightTrigger/255.0f;
  60.     }
  61.  
  62.     if(_controllerState.Gamepad.bLeftTrigger && _controllerState.Gamepad.bLeftTrigger < XINPUT_GAMEPAD_TRIGGER_THRESHOLD)
  63.     {
  64.         State._left_trigger = _controllerState.Gamepad.bLeftTrigger/255.0f;
  65.     }
  66.  
  67.     // Get the Buttons
  68.    
  69.     if(_controllerState.Gamepad.wButtons & XINPUT_GAMEPAD_A) State._buttons[GamePad_Button_A] = true;
  70.     if(_controllerState.Gamepad.wButtons & XINPUT_GAMEPAD_B) State._buttons[GamePad_Button_B] = true;
  71.     if(_controllerState.Gamepad.wButtons & XINPUT_GAMEPAD_X) State._buttons[GamePad_Button_X] = true;
  72.     if(_controllerState.Gamepad.wButtons & XINPUT_GAMEPAD_Y) State._buttons[GamePad_Button_Y] = true;
  73.     if(_controllerState.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_DOWN) State._buttons[GamePad_Button_DPAD_DOWN] = true;
  74.     if(_controllerState.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_UP) State._buttons[GamePad_Button_DPAD_UP] = true;
  75.     if(_controllerState.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_LEFT) State._buttons[GamePad_Button_DPAD_LEFT] = true;
  76.     if(_controllerState.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_RIGHT) State._buttons[GamePad_Button_DPAD_RIGHT] = true;
  77.     if(_controllerState.Gamepad.wButtons & XINPUT_GAMEPAD_BACK) State._buttons[GamePad_Button_BACK] = true;
  78.     if(_controllerState.Gamepad.wButtons & XINPUT_GAMEPAD_START) State._buttons[GamePad_Button_START] = true;
  79.     if(_controllerState.Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_SHOULDER) State._buttons[GamePad_Button_LEFT_SHOULDER] = true;
  80.     if(_controllerState.Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_SHOULDER) State._buttons[GamePad_Button_RIGHT_SHOULDER] = true;
  81.     if(_controllerState.Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_THUMB) State._buttons[GamePad_Button_LEFT_THUMB] = true;
  82.  
  83.     // Check to make sure we are not moving during the dead zone
  84.     // Let's check the Left DeadZone
  85.     if((_controllerState.Gamepad.sThumbLX < XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE && _controllerState.Gamepad.sThumbLX > -XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE) &&
  86.         (_controllerState.Gamepad.sThumbLY < XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE &&_controllerState.Gamepad.sThumbLY > -XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE) )
  87.     {    
  88.         _controllerState.Gamepad.sThumbLX = 0;
  89.         _controllerState.Gamepad.sThumbLY = 0;
  90.     }
  91.  
  92.     // Check left thumbStick
  93.     float leftThumbY = _controllerState.Gamepad.sThumbLY;
  94.  
  95.     if(leftThumbY)
  96.     {
  97.         State._left_thumbstick.y = leftThumbY;
  98.     }
  99.  
  100.     float leftThumbX = _controllerState.Gamepad.sThumbLX;
  101.  
  102.     if(leftThumbX)
  103.     {
  104.         State._left_thumbstick.x = leftThumbX;
  105.     }    
  106.     // For the rightThumbstick it's pretty much the same.
  107.     //-------------------------------------------------------------
  108.  
  109.     // Check to make sure we are not moving during the dead zone
  110.     // Let's check the Left DeadZone
  111.     if((_controllerState.Gamepad.sThumbRX < XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE && _controllerState.Gamepad.sThumbRX > -XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE) &&
  112.         (_controllerState.Gamepad.sThumbRY < XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE &&_controllerState.Gamepad.sThumbRY > -XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE) )
  113.     {    
  114.         _controllerState.Gamepad.sThumbRX = 0;
  115.         _controllerState.Gamepad.sThumbRY = 0;
  116.     }
  117.  
  118.     // Check left thumbStick
  119.     float rightThumbY = _controllerState.Gamepad.sThumbRY;
  120.  
  121.     if(rightThumbY)
  122.     {
  123.         State._right_thumbstick.y = rightThumbY;
  124.     }
  125.  
  126.     float rightThumbX = _controllerState.Gamepad.sThumbRX;
  127.  
  128.     if(rightThumbX)
  129.     {
  130.         State._right_thumbstick.y = rightThumbX;
  131.     }    
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement