Advertisement
huutho_96

Input.cpp

Sep 16th, 2016
296
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "Input.h"
  2.  
  3.  
  4.  
  5. Input::Input()
  6. {
  7.     for (int i = 0; i < InputNS::KEYS_ARRAY_LENGTH; i++)
  8.     {
  9.         _keyDown[i] = false;
  10.         _keyPressed[i] = false;
  11.     }
  12.     _newLine = true;
  13.     _charIn = 0;
  14.     _textIn = "";
  15.  
  16.     _mouseRawX = _mouseRawY = _mouseX = _mouseY = 0;
  17.     _mouseLeftButton = _mouseMiddleButton = _mouseRightButton = _mouseX1Button = _mouseX2Button = false;
  18.  
  19.     for (int i = 0; i < MAX_CONTROLLERS; i++)
  20.     {
  21.         _controllerState[i].vibrateTimeLeft = 0;
  22.         _controllerState[i].vibrateTimeRight = 0;
  23.     }
  24.  
  25.     _thumbstickDeadzone = GAMEPAD_THUMBSTICK_DEADZONE;
  26.     _triggerDeadzone = GAMEPAD_TRIGGER_DEADZONE;
  27. }
  28.  
  29.  
  30. Input::~Input()
  31. {
  32.     if (_mouseCaptured)
  33.         ReleaseCapture();
  34. }
  35.  
  36. void Input::checkControllers()
  37. {
  38.     DWORD result;
  39.     for (DWORD i = 0; i <MAX_CONTROLLERS; i++)
  40.     {
  41.         result = XInputGetState(i, &_controllerState[i].state);
  42.         if (result == ERROR_SUCCESS)
  43.             _controllerState[i].connected = true;
  44.         else
  45.             _controllerState[i].connected = false;
  46.     }
  47. }
  48.  
  49. void Input::initialize(HWND hwnd, bool capture)
  50. {
  51.     try
  52.     {
  53.         _mouseCaptured = capture;
  54.         _rid[0].usUsagePage = HID_USAGE_PAGE_GENERIC;
  55.         _rid[0].usUsage = HID_USAGE_GENERIC_MOUSE;
  56.         _rid[0].dwFlags = RIDEV_INPUTSINK;
  57.         _rid[0].hwndTarget = hwnd;
  58.         RegisterRawInputDevices(_rid, 1, sizeof(_rid[0]));
  59.  
  60.         if (_mouseCaptured)
  61.             SetCapture(hwnd);
  62.         ZeroMemory(_controllerState, sizeof(ControllerState) * MAX_CONTROLLERS);
  63.         checkControllers();
  64.     }
  65.     catch (...)
  66.     {
  67.         throw (Error(ERRORNS::FATAL_ERROR, "Error initializing input system"));
  68.     }
  69. }
  70.  
  71. void Input::keyDown(WPARAM w)
  72. {
  73.     if (w < InputNS::KEYS_ARRAY_LENGTH)
  74.     {
  75.         _keyDown[w] = true;
  76.         _keyPressed[w] = true;
  77.     }
  78. }
  79.  
  80. void Input::keyUp(WPARAM w)
  81. {
  82.     if (w < InputNS::KEYS_ARRAY_LENGTH)
  83.         _keyDown[w] = false;
  84. }
  85.  
  86. void Input::keyIn(WPARAM w)
  87. {
  88.     if (_newLine)
  89.     {
  90.         _textIn.clear();
  91.         _newLine = false;
  92.     }
  93.     if (w == '\b')
  94.     {
  95.         if (_textIn.length() > 0)
  96.             _textIn.erase(_textIn.size() - 1);
  97.     }
  98.     else
  99.     {
  100.         _textIn += w;
  101.         _charIn = w;
  102.     }
  103.     if (w == '\r')
  104.         _newLine = true;
  105. }
  106.  
  107. bool Input::isKeyDown(UCHAR w) const
  108. {
  109.     if (w < InputNS::KEYS_ARRAY_LENGTH)
  110.         return _keyDown[w];
  111.     return false;
  112. }
  113.  
  114. bool Input::wasKeyPressed(UCHAR w) const
  115. {
  116.     if (w < InputNS::KEYS_ARRAY_LENGTH)
  117.         return _keyPressed[w];
  118.     return false;
  119. }
  120.  
  121. bool Input::anyKeyPressed() const
  122. {
  123.     for (int i = 0; i < InputNS::KEYS_ARRAY_LENGTH; i++)
  124.         if (_keyPressed[i] == true)
  125.             return true;
  126.     return false;
  127. }
  128.  
  129. void Input::clearKeyPress(UCHAR w)
  130. {
  131.     if (w < InputNS::KEYS_ARRAY_LENGTH)
  132.         _keyPressed[w] = false;
  133. }
  134.  
  135. void Input::clearAll()
  136. {
  137.     clear(InputNS::KEYS_MOUSE_TEXT);
  138.     clear(InputNS::KEYS_DOWN);
  139. }
  140.  
  141. void Input::clear(UCHAR what)
  142. {
  143.     if (what & InputNS::KEYS_DOWN)
  144.     {
  145.         for (int i = 0; i < InputNS::KEYS_ARRAY_LENGTH; i++)
  146.             _keyDown[i] = false;
  147.     }
  148.     if (what & InputNS::KEYS_PRESSED)
  149.     {
  150.         for (int i = 0; i < InputNS::KEYS_ARRAY_LENGTH; i++)
  151.             _keyPressed[i] = false;
  152.     }
  153.     if (what & InputNS::MOUSE)
  154.     {
  155.         _mouseX = _mouseRawX = _mouseY = _mouseRawY = 0;
  156.     }
  157.     if (what & InputNS::TEXT_IN)
  158.     {
  159.         _textIn.clear();
  160.     }
  161. }
  162.  
  163. void Input::mouseIn(LPARAM l)
  164. {
  165.     _mouseX = GET_X_LPARAM(l);
  166.     _mouseY = GET_Y_LPARAM(l);
  167. }
  168.  
  169. void Input::mouseRawIn(LPARAM l)
  170. {
  171.     UINT dwSize = 40;
  172.     static BYTE lbp[40];
  173.     GetRawInputData((HRAWINPUT)l, RID_INPUT, lbp, &dwSize, sizeof(RAWINPUTHEADER));
  174.     RAWINPUT *rawInput = (RAWINPUT *)lbp;
  175.     if (rawInput->header.dwType == RIM_TYPEMOUSE)
  176.     {
  177.         _mouseRawX = rawInput->data.mouse.lLastX;
  178.         _mouseRawY = rawInput->data.mouse.lLastY;
  179.     }
  180. }
  181.  
  182. void Input::readController()
  183. {
  184.     DWORD result;
  185.     for (DWORD i = 0; i < MAX_CONTROLLERS; i++)
  186.     {
  187.         if (_controllerState[i].connected)
  188.         {
  189.             result = XInputGetState(i, &_controllerState[i].state);
  190.             if (result == ERROR_DEVICE_NOT_CONNECTED)
  191.             {
  192.                 _controllerState[i].connected = false;
  193.             }
  194.         }
  195.     }
  196. }
  197.  
  198. const ControllerState * Input::getControllerState(UINT n)
  199. {
  200.     if (n > MAX_CONTROLLERS - 1)
  201.         n = MAX_CONTROLLERS - 1;
  202.     return &_controllerState[n];
  203. }
  204.  
  205. const WORD Input::getGamepadButtons(UINT n)
  206. {
  207.     if (n > MAX_CONTROLLERS - 1)
  208.         n = MAX_CONTROLLERS - 1;
  209.     return _controllerState[n].state.Gamepad.wButtons;
  210. }
  211.  
  212.  
  213. bool Input::getGamepadDPadUp(UINT n)
  214. {
  215.     if (n > MAX_CONTROLLERS - 1)
  216.         n = MAX_CONTROLLERS - 1;
  217.     return ((_controllerState[n].state.Gamepad.wButtons&GAMEPAD_DPAD_UP) != 0);
  218. }
  219.  
  220. bool Input::getGamepadDPadDown(UINT n)
  221. {
  222.     if (n > MAX_CONTROLLERS - 1)
  223.         n = MAX_CONTROLLERS - 1;
  224.     return ((_controllerState[n].state.Gamepad.wButtons&GAMEPAD_DPAD_DOWN) != 0);
  225. }
  226.  
  227. bool Input::getGamepadDPadLeft(UINT n)
  228. {
  229.     if (n > MAX_CONTROLLERS - 1)
  230.         n = MAX_CONTROLLERS - 1;
  231.     return ((_controllerState[n].state.Gamepad.wButtons&GAMEPAD_DPAD_LEFT) != 0);
  232. }
  233.  
  234. bool Input::getGamepadDPadRight(UINT n)
  235. {
  236.     if (n > MAX_CONTROLLERS - 1)
  237.         n = MAX_CONTROLLERS - 1;
  238.     return bool((_controllerState[n].state.Gamepad.wButtons&GAMEPAD_DPAD_RIGHT) != 0);
  239. }
  240.  
  241. bool Input::getGamepadStart(UINT n)
  242. {
  243.     if (n > MAX_CONTROLLERS - 1)
  244.         n = MAX_CONTROLLERS - 1;
  245.     return bool((_controllerState[n].state.Gamepad.wButtons&GAMEPAD_START_BUTTON) != 0);
  246. }
  247.  
  248. bool Input::getGamepadBack(UINT n)
  249. {
  250.     if (n > MAX_CONTROLLERS - 1)
  251.         n = MAX_CONTROLLERS - 1;
  252.     return bool((_controllerState[n].state.Gamepad.wButtons&GAMEPAD_BACK_BUTTON) != 0);
  253. }
  254.  
  255. bool Input::getGamepadLeftThumb(UINT n)
  256. {
  257.     if (n > MAX_CONTROLLERS - 1)
  258.         n = MAX_CONTROLLERS - 1;
  259.     return bool((_controllerState[n].state.Gamepad.wButtons&GAMEPAD_LEFT_THUMB) != 0);
  260. }
  261.  
  262. bool Input::getGamepadRightThumb(UINT n)
  263. {
  264.     if (n > MAX_CONTROLLERS - 1)
  265.         n = MAX_CONTROLLERS - 1;
  266.     return bool((_controllerState[n].state.Gamepad.wButtons&GAMEPAD_RIGHT_THUMB) != 0);
  267. }
  268.  
  269.  
  270. bool Input::getGamepadLeftShoulder(UINT n)
  271. {
  272.     if (n > MAX_CONTROLLERS - 1)
  273.         n = MAX_CONTROLLERS - 1;
  274.     return bool((_controllerState[n].state.Gamepad.wButtons&GAMEPAD_LEFT_SHOULDER) != 0);
  275. }
  276.  
  277.  
  278. bool Input::getGamepadRightShoulder(UINT n)
  279. {
  280.     if (n > MAX_CONTROLLERS - 1)
  281.         n = MAX_CONTROLLERS - 1;
  282.     return bool((_controllerState[n].state.Gamepad.wButtons&GAMEPAD_RIGHT_SHOULDER) != 0);
  283. }
  284.  
  285.  
  286. bool Input::getGamepadA(UINT n)
  287. {
  288.     if (n > MAX_CONTROLLERS - 1)
  289.         n = MAX_CONTROLLERS - 1;
  290.     return bool((_controllerState[n].state.Gamepad.wButtons&GAMEPAD_A) != 0);
  291. }
  292.  
  293.  
  294. bool Input::getGamepadB(UINT n)
  295. {
  296.     if (n > MAX_CONTROLLERS - 1)
  297.         n = MAX_CONTROLLERS - 1;
  298.     return bool((_controllerState[n].state.Gamepad.wButtons&GAMEPAD_B) != 0);
  299. }
  300.  
  301.  
  302. bool Input::getGamepadX(UINT n)
  303. {
  304.     if (n > MAX_CONTROLLERS - 1)
  305.         n = MAX_CONTROLLERS - 1;
  306.     return bool((_controllerState[n].state.Gamepad.wButtons&GAMEPAD_X) != 0);
  307. }
  308.  
  309.  
  310. bool Input::getGamepadY(UINT n)
  311. {
  312.     if (n > MAX_CONTROLLERS - 1)
  313.         n = MAX_CONTROLLERS - 1;
  314.     return bool((_controllerState[n].state.Gamepad.wButtons&GAMEPAD_Y) != 0);
  315. }
  316.  
  317. BYTE Input::getGamepadLeftTrigger(UINT n)
  318. {
  319.     BYTE value = getGamepadLeftTriggerUndead(n);
  320.     if (value > _triggerDeadzone)
  321.         value = (value - _triggerDeadzone) * 255 / (255 - _triggerDeadzone);
  322.     else
  323.         value = 0;
  324.     return value;
  325. }
  326.  
  327. BYTE Input::getGamepadLeftTriggerUndead(UINT n)
  328. {
  329.     if (n > MAX_CONTROLLERS - 1)
  330.         n = MAX_CONTROLLERS - 1;
  331.     return _controllerState[n].state.Gamepad.bLeftTrigger;
  332. }
  333.  
  334. BYTE Input::getGamepadRightTrigger(UINT n)
  335. {
  336.     BYTE value = getGamepadRightTriggerUndead(n);
  337.     if (value > _triggerDeadzone)
  338.         value = (value - _triggerDeadzone) * 255 /
  339.         (255 - _triggerDeadzone);
  340.     else
  341.         value = 0;
  342.     return value;
  343. }
  344.  
  345. BYTE Input::getGamepadRightTriggerUndead(UINT n)
  346. {
  347.     if (n > MAX_CONTROLLERS - 1)
  348.         n = MAX_CONTROLLERS - 1;
  349.     return _controllerState[n].state.Gamepad.bRightTrigger;
  350. }
  351.  
  352. SHORT Input::getGamepadThumbLX(UINT n)
  353. {
  354.     int x = getGamepadThumbLXUndead(n);
  355.     if (x > _thumbstickDeadzone)
  356.         x = (x - _thumbstickDeadzone) * 32767 / (32767 - _thumbstickDeadzone);
  357.     else if (x < -_thumbstickDeadzone)
  358.         x = (x + _thumbstickDeadzone) * 32767 / (32767 - _thumbstickDeadzone);
  359.     else
  360.         x = 0;
  361.     return static_cast<SHORT>(x);
  362. }
  363.  
  364. SHORT Input::getGamepadThumbLXUndead(UINT n)
  365. {
  366.     if (n > MAX_CONTROLLERS - 1)
  367.         n = MAX_CONTROLLERS - 1;
  368.     return _controllerState[n].state.Gamepad.sThumbLX;
  369. }
  370.  
  371. SHORT Input::getGamepadThumbLY(UINT n)
  372. {
  373.     int y = getGamepadThumbLYUndead(n);
  374.     if (y > _thumbstickDeadzone)
  375.         y = (y - _thumbstickDeadzone) * 32767 / (32767 - _thumbstickDeadzone);
  376.     else if (y < -_thumbstickDeadzone)
  377.         y = (y + _thumbstickDeadzone) * 32767 / (32767 - _thumbstickDeadzone);
  378.     else
  379.         y = 0;
  380.     return static_cast<SHORT>(y);
  381. }
  382.  
  383. SHORT Input::getGamepadThumbLYUndead(UINT n)
  384. {
  385.     if (n > MAX_CONTROLLERS - 1)
  386.         n = MAX_CONTROLLERS - 1;
  387.     return _controllerState[n].state.Gamepad.sThumbLY;
  388. }
  389.  
  390. SHORT Input::getGamepadThumbRX(UINT n)
  391. {
  392.     int x = getGamepadThumbRXUndead(n);
  393.     if (x > _thumbstickDeadzone)
  394.         x = (x - _thumbstickDeadzone) * 32767 / (32767 - _thumbstickDeadzone);
  395.     else if (x < -_thumbstickDeadzone)
  396.         x = (x + _thumbstickDeadzone) * 32767 / (32767 - _thumbstickDeadzone);
  397.     else
  398.         x = 0;
  399.     return static_cast<SHORT>(x);
  400. }
  401.  
  402. SHORT Input::getGamepadThumbRXUndead(UINT n)
  403. {
  404.     if (n > MAX_CONTROLLERS - 1)
  405.         n = MAX_CONTROLLERS - 1;
  406.     return _controllerState[n].state.Gamepad.sThumbRX;
  407. }
  408.  
  409. SHORT Input::getGamepadThumbRY(UINT n)
  410. {
  411.     int y = getGamepadThumbRYUndead(n);
  412.     if (y > _thumbstickDeadzone)
  413.         y = (y - _thumbstickDeadzone) * 32767 / (32767 - _thumbstickDeadzone);
  414.     else if (y < -_thumbstickDeadzone)
  415.         y = (y + _thumbstickDeadzone) * 32767 / (32767 - _thumbstickDeadzone);
  416.     else
  417.         y = 0;
  418.     return static_cast<SHORT>(y);
  419. }
  420.  
  421. SHORT Input::getGamepadThumbRYUndead(UINT n)
  422. {
  423.     if (n > MAX_CONTROLLERS - 1)
  424.         n = MAX_CONTROLLERS - 1;
  425.     return _controllerState[n].state.Gamepad.sThumbRY;
  426. }
  427.  
  428. void Input::gamePadVibrateLeft(UINT n, WORD speed, float sec)
  429. {
  430.     if (n > MAX_CONTROLLERS - 1)
  431.         n = MAX_CONTROLLERS - 1;
  432.     _controllerState[n].vibration.wLeftMotorSpeed = speed;
  433.     _controllerState[n].vibrateTimeLeft = sec;
  434. }
  435.  
  436. void Input::gamePadVibrateRight(UINT n, WORD speed, float sec)
  437. {
  438.     if (n > MAX_CONTROLLERS - 1)
  439.         n = MAX_CONTROLLERS - 1;
  440.     _controllerState[n].vibration.wRightMotorSpeed = speed;
  441.     _controllerState[n].vibrateTimeRight = sec;
  442. }
  443.  
  444. void Input::vibrateControllers(float frameTime)
  445. {
  446.     for (int i = 0; i < MAX_CONTROLLERS; i++)
  447.     {
  448.         if (_controllerState[i].connected)
  449.         {
  450.             _controllerState[i].vibrateTimeLeft -= frameTime;
  451.             if (_controllerState[i].vibrateTimeLeft < 0)
  452.             {
  453.                 _controllerState[i].vibrateTimeLeft = 0;
  454.                 _controllerState[i].vibration.wLeftMotorSpeed = 0;
  455.             }
  456.             _controllerState[i].vibrateTimeRight -= frameTime;
  457.             if (_controllerState[i].vibrateTimeRight < 0)
  458.             {
  459.                 _controllerState[i].vibrateTimeRight = 0;
  460.                 _controllerState[i].vibration.wRightMotorSpeed = 0;
  461.             }
  462.             XInputSetState(i, &_controllerState[i].vibration);
  463.         }
  464.     }
  465. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement