GamepadSample.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #include "GamepadSample.h"
  2. #if defined(ADD_SAMPLE)
  3. ADD_SAMPLE("Input", "Gamepads", GamepadSample, 3);
  4. #endif
  5. GamepadSample::GamepadSample() : _gamepad(NULL), _font(NULL)
  6. {
  7. }
  8. void GamepadSample::initialize()
  9. {
  10. setMultiTouch(true);
  11. _gamepad = getGamepad(0);
  12. // This is needed because the virtual gamepad is shared between all samples.
  13. // SamplesGame always ensures the virtual gamepad is disabled when a sample is exited.
  14. if (_gamepad && _gamepad->isVirtual())
  15. _gamepad->getForm()->setEnabled(true);
  16. _font = Font::create("res/ui/arial.gpb");
  17. _status = "Looking for gamepads...";
  18. }
  19. void GamepadSample::finalize()
  20. {
  21. SAFE_RELEASE(_font);
  22. }
  23. void GamepadSample::updateGamepad(float elapsedTime, Gamepad* gamepad, unsigned int player)
  24. {
  25. char s[128];
  26. sprintf(s, "Player: %d - %s\nButtons: ", player, gamepad->getName());
  27. _status += s;
  28. for (int i = 0; i < 20; ++i)
  29. {
  30. if (gamepad->isButtonDown((Gamepad::ButtonMapping)i))
  31. {
  32. sprintf(s, "%s ", getStringFromButtonMapping((Gamepad::ButtonMapping)i));
  33. _status += s;
  34. }
  35. }
  36. _status += "\n";
  37. for (unsigned int j = 0; j < gamepad->getJoystickCount(); ++j)
  38. {
  39. Vector2 joystick;
  40. gamepad->getJoystickValues(j, &joystick);
  41. sprintf(s, "Joystick %d: (%f, %f)\n", j, joystick.x, joystick.y);
  42. _status += s;
  43. }
  44. for (unsigned int k = 0; k < gamepad->getTriggerCount(); ++k)
  45. {
  46. sprintf(s, "Trigger %d: %f\n", k, gamepad->getTriggerValue(k));
  47. _status += s;
  48. }
  49. _status += "\n";
  50. }
  51. void GamepadSample::update(float elapsedTime)
  52. {
  53. _status = "";
  54. if (_gamepad)
  55. updateGamepad(elapsedTime, _gamepad, 1);
  56. }
  57. void GamepadSample::render(float elapsedTime)
  58. {
  59. clear(CLEAR_COLOR_DEPTH, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0);
  60. drawFrameRate(_font, Vector4(0, 0.5f, 1, 1), 5, 1, getFrameRate());
  61. _font->start();
  62. _font->drawText(_status.c_str(), 7, 27, Vector4::one(), 22);
  63. _font->finish();
  64. _gamepad->draw();
  65. }
  66. void GamepadSample::gamepadEvent(Gamepad::GamepadEvent evt, Gamepad* gamepad)
  67. {
  68. switch(evt)
  69. {
  70. case Gamepad::CONNECTED_EVENT:
  71. case Gamepad::DISCONNECTED_EVENT:
  72. _gamepad = getGamepad(0);
  73. // This is needed because the virtual gamepad is shared between all samples.
  74. // SamplesGame always ensures the virtual gamepad is disabled when a sample is exited.
  75. if (_gamepad && _gamepad->isVirtual())
  76. _gamepad->getForm()->setEnabled(true);
  77. break;
  78. }
  79. }
  80. const char* GamepadSample::getStringFromButtonMapping(Gamepad::ButtonMapping mapping)
  81. {
  82. switch (mapping)
  83. {
  84. case Gamepad::BUTTON_A:
  85. return "A";
  86. case Gamepad::BUTTON_B:
  87. return "B";
  88. case Gamepad::BUTTON_X:
  89. return "X";
  90. case Gamepad::BUTTON_Y:
  91. return "Y";
  92. case Gamepad::BUTTON_L1:
  93. return "L1";
  94. case Gamepad::BUTTON_L2:
  95. return "L2";
  96. case Gamepad::BUTTON_L3:
  97. return "L3";
  98. case Gamepad::BUTTON_R1:
  99. return "R1";
  100. case Gamepad::BUTTON_R2:
  101. return "R2";
  102. case Gamepad::BUTTON_R3:
  103. return "R3";
  104. case Gamepad::BUTTON_UP:
  105. return "UP";
  106. case Gamepad::BUTTON_DOWN:
  107. return "DOWN";
  108. case Gamepad::BUTTON_LEFT:
  109. return "LEFT";
  110. case Gamepad::BUTTON_RIGHT:
  111. return "RIGHT";
  112. case Gamepad::BUTTON_MENU1:
  113. return "MENU1";
  114. case Gamepad::BUTTON_MENU2:
  115. return "MENU2";
  116. case Gamepad::BUTTON_MENU3:
  117. return "MENU3";
  118. default:
  119. return "";
  120. }
  121. }