Joystick.cpp 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. /**
  2. * Copyright (c) 2006-2023 LOVE Development Team
  3. *
  4. * This software is provided 'as-is', without any express or implied
  5. * warranty. In no event will the authors be held liable for any damages
  6. * arising from the use of this software.
  7. *
  8. * Permission is granted to anyone to use this software for any purpose,
  9. * including commercial applications, and to alter it and redistribute it
  10. * freely, subject to the following restrictions:
  11. *
  12. * 1. The origin of this software must not be misrepresented; you must not
  13. * claim that you wrote the original software. If you use this software
  14. * in a product, an acknowledgment in the product documentation would be
  15. * appreciated but is not required.
  16. * 2. Altered source versions must be plainly marked as such, and must not be
  17. * misrepresented as being the original software.
  18. * 3. This notice may not be removed or altered from any source distribution.
  19. **/
  20. // LOVE
  21. #include "Joystick.h"
  22. // STL
  23. #include <cmath>
  24. namespace love
  25. {
  26. namespace joystick
  27. {
  28. love::Type Joystick::type("Joystick", &Object::type);
  29. float Joystick::clampval(float x)
  30. {
  31. if (fabsf(x) < 0.01)
  32. return 0.0f;
  33. if (x < -0.99f) return -1.0f;
  34. if (x > 0.99f) return 1.0f;
  35. return x;
  36. }
  37. STRINGMAP_CLASS_BEGIN(Joystick, Joystick::Hat, Joystick::HAT_MAX_ENUM, hat)
  38. {
  39. { "c", Joystick::HAT_CENTERED },
  40. { "u", Joystick::HAT_UP },
  41. { "r", Joystick::HAT_RIGHT },
  42. { "d", Joystick::HAT_DOWN },
  43. { "l", Joystick::HAT_LEFT },
  44. { "ru", Joystick::HAT_RIGHTUP },
  45. { "rd", Joystick::HAT_RIGHTDOWN },
  46. { "lu", Joystick::HAT_LEFTUP },
  47. { "ld", Joystick::HAT_LEFTDOWN },
  48. }
  49. STRINGMAP_CLASS_END(Joystick, Joystick::Hat, Joystick::HAT_MAX_ENUM, hat)
  50. STRINGMAP_CLASS_BEGIN(Joystick, Joystick::JoystickType, Joystick::JOYSTICK_TYPE_MAX_ENUM, joystickType)
  51. {
  52. { "unknown", Joystick::JOYSTICK_TYPE_UNKNOWN },
  53. { "gamepad", Joystick::JOYSTICK_TYPE_GAMEPAD },
  54. { "wheel", Joystick::JOYSTICK_TYPE_WHEEL },
  55. { "arcadestick", Joystick::JOYSTICK_TYPE_ARCADE_STICK },
  56. { "flightstick", Joystick::JOYSTICK_TYPE_FLIGHT_STICK },
  57. { "dancepad", Joystick::JOYSTICK_TYPE_DANCE_PAD },
  58. { "guitar", Joystick::JOYSTICK_TYPE_GUITAR },
  59. { "drumkit", Joystick::JOYSTICK_TYPE_DRUM_KIT },
  60. { "arcadepad", Joystick::JOYSTICK_TYPE_ARCADE_PAD },
  61. { "throttle", Joystick::JOYSTICK_TYPE_THROTTLE },
  62. }
  63. STRINGMAP_CLASS_END(Joystick, Joystick::JoystickType, Joystick::JOYSTICK_TYPE_MAX_ENUM, joystickType)
  64. STRINGMAP_CLASS_BEGIN(Joystick, Joystick::GamepadType, Joystick::GAMEPAD_TYPE_MAX_ENUM, gamepadType)
  65. {
  66. { "unknown", Joystick::GAMEPAD_TYPE_UNKNOWN },
  67. { "xbox360", Joystick::GAMEPAD_TYPE_XBOX360 },
  68. { "xboxone", Joystick::GAMEPAD_TYPE_XBOXONE },
  69. { "ps3", Joystick::GAMEPAD_TYPE_PS3 },
  70. { "ps4", Joystick::GAMEPAD_TYPE_PS4 },
  71. { "ps5", Joystick::GAMEPAD_TYPE_PS5 },
  72. { "switchpro", Joystick::GAMEPAD_TYPE_NINTENDO_SWITCH_PRO },
  73. { "amazonluna", Joystick::GAMEPAD_TYPE_AMAZON_LUNA },
  74. { "stadia", Joystick::GAMEPAD_TYPE_STADIA },
  75. { "virtual", Joystick::GAMEPAD_TYPE_VIRTUAL },
  76. { "shield", Joystick::GAMEPAD_TYPE_NVIDIA_SHIELD },
  77. { "joyconleft", Joystick::GAMEPAD_TYPE_JOYCON_LEFT },
  78. { "joyconright", Joystick::GAMEPAD_TYPE_JOYCON_RIGHT },
  79. { "joyconpair", Joystick::GAMEPAD_TYPE_JOYCON_PAIR },
  80. }
  81. STRINGMAP_CLASS_END(Joystick, Joystick::GamepadType, Joystick::GAMEPAD_TYPE_MAX_ENUM, gamepadType)
  82. STRINGMAP_CLASS_BEGIN(Joystick, Joystick::GamepadAxis, Joystick::GAMEPAD_AXIS_MAX_ENUM, gpAxis)
  83. {
  84. { "leftx", Joystick::GAMEPAD_AXIS_LEFTX },
  85. { "lefty", Joystick::GAMEPAD_AXIS_LEFTY },
  86. { "rightx", Joystick::GAMEPAD_AXIS_RIGHTX },
  87. { "righty", Joystick::GAMEPAD_AXIS_RIGHTY },
  88. { "triggerleft", Joystick::GAMEPAD_AXIS_TRIGGERLEFT },
  89. { "triggerright", Joystick::GAMEPAD_AXIS_TRIGGERRIGHT },
  90. }
  91. STRINGMAP_CLASS_END(Joystick, Joystick::GamepadAxis, Joystick::GAMEPAD_AXIS_MAX_ENUM, gpAxis)
  92. STRINGMAP_CLASS_BEGIN(Joystick, Joystick::GamepadButton, Joystick::GAMEPAD_BUTTON_MAX_ENUM, gpButton)
  93. {
  94. { "a", Joystick::GAMEPAD_BUTTON_A },
  95. { "b", Joystick::GAMEPAD_BUTTON_B },
  96. { "x", Joystick::GAMEPAD_BUTTON_X },
  97. { "y", Joystick::GAMEPAD_BUTTON_Y },
  98. { "back", Joystick::GAMEPAD_BUTTON_BACK },
  99. { "guide", Joystick::GAMEPAD_BUTTON_GUIDE },
  100. { "start", Joystick::GAMEPAD_BUTTON_START },
  101. { "leftstick", Joystick::GAMEPAD_BUTTON_LEFTSTICK },
  102. { "rightstick", Joystick::GAMEPAD_BUTTON_RIGHTSTICK },
  103. { "leftshoulder", Joystick::GAMEPAD_BUTTON_LEFTSHOULDER },
  104. { "rightshoulder", Joystick::GAMEPAD_BUTTON_RIGHTSHOULDER },
  105. { "dpup", Joystick::GAMEPAD_BUTTON_DPAD_UP },
  106. { "dpdown", Joystick::GAMEPAD_BUTTON_DPAD_DOWN },
  107. { "dpleft", Joystick::GAMEPAD_BUTTON_DPAD_LEFT },
  108. { "dpright", Joystick::GAMEPAD_BUTTON_DPAD_RIGHT },
  109. { "misc1", Joystick::GAMEPAD_BUTTON_MISC1 },
  110. { "paddle1", Joystick::GAMEPAD_BUTTON_PADDLE1 },
  111. { "paddle2", Joystick::GAMEPAD_BUTTON_PADDLE2 },
  112. { "paddle3", Joystick::GAMEPAD_BUTTON_PADDLE3 },
  113. { "paddle4", Joystick::GAMEPAD_BUTTON_PADDLE4 },
  114. { "touchpad", Joystick::GAMEPAD_BUTTON_TOUCHPAD },
  115. }
  116. STRINGMAP_CLASS_END(Joystick, Joystick::GamepadButton, Joystick::GAMEPAD_BUTTON_MAX_ENUM, gpButton)
  117. STRINGMAP_CLASS_BEGIN(Joystick, Joystick::InputType, Joystick::INPUT_TYPE_MAX_ENUM, inputType)
  118. {
  119. { "axis", Joystick::INPUT_TYPE_AXIS },
  120. { "button", Joystick::INPUT_TYPE_BUTTON },
  121. { "hat", Joystick::INPUT_TYPE_HAT },
  122. }
  123. STRINGMAP_CLASS_END(Joystick, Joystick::InputType, Joystick::INPUT_TYPE_MAX_ENUM, inputType)
  124. } // joystick
  125. } // love