Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // This is the main DLL file.
- #include "XboxController.h"
- XboxController::XboxController(GamePadIndex player)
- {
- this->_playerIndex = player;
- this->State.reset();
- }
- XboxController::~XboxController(void)
- {
- if(this->IsConnected())
- {
- XboxController::Vibrate(0,0);
- }
- }
- bool XboxController::IsConnected()
- {
- //clean the state
- memset(&_controllerState,0,sizeof(XINPUT_STATE));
- //ZeroMemory(&_controllerState, sizeof(XINPUT_STATE));
- //Get the state
- DWORD Result = XInputGetState(this->_playerIndex, &_controllerState);
- if(Result==ERROR_SUCCESS){
- return true;
- }
- else
- {
- return false;
- }
- }
- void XboxController::Vibrate(int leftVal, int rightVal)
- {
- //Create a vibration state
- XINPUT_VIBRATION Vibration;
- memset(&_controllerState, 0, sizeof(XINPUT_STATE));
- int leftVib = (int)(leftVal*65535.0f);
- int rightVib = (int)(rightVal*65535.0f);
- Vibration.wLeftMotorSpeed = leftVib ;
- Vibration.wRightMotorSpeed = rightVib ;
- //Vibrate Controller
- XInputSetState((int)_controllerNumber, &Vibration);
- }
- void XboxController::Update()
- {
- State.reset();
- // The values of the Left and Right Triggers go from 0 to 255. We just convert them to 0.0f=>1.0f
- if(_controllerState.Gamepad.bRightTrigger && _controllerState.Gamepad.bRightTrigger < XINPUT_GAMEPAD_TRIGGER_THRESHOLD)
- {
- State._right_trigger = _controllerState.Gamepad.bRightTrigger/255.0f;
- }
- if(_controllerState.Gamepad.bLeftTrigger && _controllerState.Gamepad.bLeftTrigger < XINPUT_GAMEPAD_TRIGGER_THRESHOLD)
- {
- State._left_trigger = _controllerState.Gamepad.bLeftTrigger/255.0f;
- }
- // Get the Buttons
- if(_controllerState.Gamepad.wButtons & XINPUT_GAMEPAD_A) State._buttons[GamePad_Button_A] = true;
- if(_controllerState.Gamepad.wButtons & XINPUT_GAMEPAD_B) State._buttons[GamePad_Button_B] = true;
- if(_controllerState.Gamepad.wButtons & XINPUT_GAMEPAD_X) State._buttons[GamePad_Button_X] = true;
- if(_controllerState.Gamepad.wButtons & XINPUT_GAMEPAD_Y) State._buttons[GamePad_Button_Y] = true;
- if(_controllerState.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_DOWN) State._buttons[GamePad_Button_DPAD_DOWN] = true;
- if(_controllerState.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_UP) State._buttons[GamePad_Button_DPAD_UP] = true;
- if(_controllerState.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_LEFT) State._buttons[GamePad_Button_DPAD_LEFT] = true;
- if(_controllerState.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_RIGHT) State._buttons[GamePad_Button_DPAD_RIGHT] = true;
- if(_controllerState.Gamepad.wButtons & XINPUT_GAMEPAD_BACK) State._buttons[GamePad_Button_BACK] = true;
- if(_controllerState.Gamepad.wButtons & XINPUT_GAMEPAD_START) State._buttons[GamePad_Button_START] = true;
- if(_controllerState.Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_SHOULDER) State._buttons[GamePad_Button_LEFT_SHOULDER] = true;
- if(_controllerState.Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_SHOULDER) State._buttons[GamePad_Button_RIGHT_SHOULDER] = true;
- if(_controllerState.Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_THUMB) State._buttons[GamePad_Button_LEFT_THUMB] = true;
- // Check to make sure we are not moving during the dead zone
- // Let's check the Left DeadZone
- if((_controllerState.Gamepad.sThumbLX < XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE && _controllerState.Gamepad.sThumbLX > -XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE) &&
- (_controllerState.Gamepad.sThumbLY < XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE &&_controllerState.Gamepad.sThumbLY > -XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE) )
- {
- _controllerState.Gamepad.sThumbLX = 0;
- _controllerState.Gamepad.sThumbLY = 0;
- }
- // Check left thumbStick
- float leftThumbY = _controllerState.Gamepad.sThumbLY;
- if(leftThumbY)
- {
- State._left_thumbstick.y = leftThumbY;
- }
- float leftThumbX = _controllerState.Gamepad.sThumbLX;
- if(leftThumbX)
- {
- State._left_thumbstick.x = leftThumbX;
- }
- // For the rightThumbstick it's pretty much the same.
- //-------------------------------------------------------------
- // Check to make sure we are not moving during the dead zone
- // Let's check the Left DeadZone
- if((_controllerState.Gamepad.sThumbRX < XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE && _controllerState.Gamepad.sThumbRX > -XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE) &&
- (_controllerState.Gamepad.sThumbRY < XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE &&_controllerState.Gamepad.sThumbRY > -XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE) )
- {
- _controllerState.Gamepad.sThumbRX = 0;
- _controllerState.Gamepad.sThumbRY = 0;
- }
- // Check left thumbStick
- float rightThumbY = _controllerState.Gamepad.sThumbRY;
- if(rightThumbY)
- {
- State._right_thumbstick.y = rightThumbY;
- }
- float rightThumbX = _controllerState.Gamepad.sThumbRX;
- if(rightThumbX)
- {
- State._right_thumbstick.y = rightThumbX;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement