PolyStemGamepad.cpp 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #include "PolyStemGamepad.h"
  2. extern "C" {
  3. bool onButtonDown(void * sender, const char * eventID, void * eventData, void * context) {
  4. struct Gamepad_buttonEvent * event;
  5. event = (Gamepad_buttonEvent*)eventData;
  6. StemGamepadController *controller = (StemGamepadController*) context;
  7. controller->coreInput->joystickButtonDown(event->buttonID, event->device->deviceID);
  8. return true;
  9. }
  10. bool onButtonUp(void * sender, const char * eventID, void * eventData, void * context) {
  11. struct Gamepad_buttonEvent * event;
  12. event = (Gamepad_buttonEvent *)eventData;
  13. StemGamepadController *controller = (StemGamepadController*) context;
  14. controller->coreInput->joystickButtonUp(event->buttonID, event->device->deviceID);
  15. return true;
  16. }
  17. bool onAxisMoved(void * sender, const char * eventID, void * eventData, void * context) {
  18. struct Gamepad_axisEvent * event;
  19. event = (Gamepad_axisEvent *)eventData;
  20. StemGamepadController *controller = (StemGamepadController*) context;
  21. controller->coreInput->joystickAxisMoved(event->axisID, event->value, event->device->deviceID);
  22. return true;
  23. }
  24. bool onDeviceAttached(void * sender, const char * eventID, void * eventData, void * context) {
  25. struct Gamepad_device * device;
  26. device = (Gamepad_device*) eventData;
  27. StemGamepadController *controller = (StemGamepadController*) context;
  28. controller->coreInput->addJoystick(device->deviceID);
  29. device->eventDispatcher->registerForEvent(device->eventDispatcher, GAMEPAD_EVENT_BUTTON_DOWN, onButtonDown, controller);
  30. device->eventDispatcher->registerForEvent(device->eventDispatcher, GAMEPAD_EVENT_BUTTON_UP, onButtonUp, controller);
  31. device->eventDispatcher->registerForEvent(device->eventDispatcher, GAMEPAD_EVENT_AXIS_MOVED, onAxisMoved, controller);
  32. return true;
  33. }
  34. bool onDeviceRemoved(void * sender, const char * eventID, void * eventData, void * context) {
  35. struct Gamepad_device * device;
  36. device = (Gamepad_device *)eventData;
  37. StemGamepadController *controller = (StemGamepadController*) context;
  38. controller->coreInput->removeJoystick(device->deviceID);
  39. return true;
  40. }
  41. StemGamepadController::StemGamepadController(Polycode::CoreInput *coreInput) {
  42. this->coreInput = coreInput;
  43. Gamepad_eventDispatcher()->registerForEvent(Gamepad_eventDispatcher(), GAMEPAD_EVENT_DEVICE_ATTACHED, onDeviceAttached, this);
  44. Gamepad_eventDispatcher()->registerForEvent(Gamepad_eventDispatcher(), GAMEPAD_EVENT_DEVICE_REMOVED, onDeviceRemoved, this);
  45. Gamepad_init();
  46. iterationsToNextPoll = POLL_ITERATION_INTERVAL;
  47. }
  48. StemGamepadController::~StemGamepadController() {
  49. }
  50. void StemGamepadController::Update() {
  51. iterationsToNextPoll--;
  52. if (iterationsToNextPoll == 0) {
  53. Gamepad_detectDevices();
  54. iterationsToNextPoll = POLL_ITERATION_INTERVAL;
  55. }
  56. Gamepad_processEvents();
  57. }
  58. }