input_manager.cpp 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. /*
  2. * Copyright (c) 2012-2016 Daniele Bartolini and individual contributors.
  3. * License: https://github.com/taylor001/crown/blob/master/LICENSE
  4. */
  5. #include "input_manager.h"
  6. #include "input_device.h"
  7. #include "memory.h"
  8. namespace crown
  9. {
  10. static const char* s_keyboard_button_names[] =
  11. {
  12. "tab", // KeyboardButton::TAB
  13. "enter", // KeyboardButton::ENTER
  14. "escape", // KeyboardButton::ESCAPE
  15. "space", // KeyboardButton::SPACE
  16. "backspace", // KeyboardButton::BACKSPACE
  17. "num_lock", // KeyboardButton::NUM_LOCK
  18. "numpad_enter", // KeyboardButton::NUMPAD_ENTER
  19. "numpad_.", // KeyboardButton::NUMPAD_DELETE
  20. "numpad_*", // KeyboardButton::NUMPAD_MULTIPLY
  21. "numpad_+", // KeyboardButton::NUMPAD_ADD
  22. "numpad_-", // KeyboardButton::NUMPAD_SUBTRACT
  23. "numpad_/", // KeyboardButton::NUMPAD_DIVIDE
  24. "numpad_0", // KeyboardButton::NUMPAD_0
  25. "numpad_1", // KeyboardButton::NUMPAD_1
  26. "numpad_2", // KeyboardButton::NUMPAD_2
  27. "numpad_3", // KeyboardButton::NUMPAD_3
  28. "numpad_4", // KeyboardButton::NUMPAD_4
  29. "numpad_5", // KeyboardButton::NUMPAD_5
  30. "numpad_6", // KeyboardButton::NUMPAD_6
  31. "numpad_7", // KeyboardButton::NUMPAD_7
  32. "numpad_8", // KeyboardButton::NUMPAD_8
  33. "numpad_9", // KeyboardButton::NUMPAD_9
  34. "f1", // KeyboardButton::F1
  35. "f2", // KeyboardButton::F2
  36. "f3", // KeyboardButton::F3
  37. "f4", // KeyboardButton::F4
  38. "f5", // KeyboardButton::F5
  39. "f6", // KeyboardButton::F6
  40. "f7", // KeyboardButton::F7
  41. "f8", // KeyboardButton::F8
  42. "f9", // KeyboardButton::F9
  43. "f10", // KeyboardButton::F10
  44. "f11", // KeyboardButton::F11
  45. "f12", // KeyboardButton::F12
  46. "home", // KeyboardButton::HOME
  47. "left", // KeyboardButton::LEFT
  48. "up", // KeyboardButton::UP
  49. "right", // KeyboardButton::RIGHT
  50. "down", // KeyboardButton::DOWN
  51. "page_up", // KeyboardButton::PAGE_UP
  52. "page_down", // KeyboardButton::PAGE_DOWN
  53. "delete", // KeyboardButton::DELETE
  54. "end", // KeyboardButton::END
  55. "left_ctrl", // KeyboardButton::LEFT_CTRL
  56. "right_ctrl", // KeyboardButton::RIGHT_CTRL
  57. "left_shift", // KeyboardButton::LEFT_SHIFT
  58. "right_shift", // KeyboardButton::RIGHT_SHIFT
  59. "caps_lock", // KeyboardButton::CAPS_LOCK
  60. "left_alt", // KeyboardButton::LEFT_ALT
  61. "right_alt", // KeyboardButton::RIGHT_ALT
  62. "left_super", // KeyboardButton::LEFT_SUPER
  63. "right_super", // KeyboardButton::RIGHT_SUPER
  64. "0", // KeyboardButton::NUMBER_0
  65. "1", // KeyboardButton::NUMBER_1
  66. "2", // KeyboardButton::NUMBER_2
  67. "3", // KeyboardButton::NUMBER_3
  68. "4", // KeyboardButton::NUMBER_4
  69. "5", // KeyboardButton::NUMBER_5
  70. "6", // KeyboardButton::NUMBER_6
  71. "7", // KeyboardButton::NUMBER_7
  72. "8", // KeyboardButton::NUMBER_8
  73. "9", // KeyboardButton::NUMBER_9
  74. "a", // KeyboardButton::A
  75. "b", // KeyboardButton::B
  76. "c", // KeyboardButton::C
  77. "d", // KeyboardButton::D
  78. "e", // KeyboardButton::E
  79. "f", // KeyboardButton::F
  80. "g", // KeyboardButton::G
  81. "h", // KeyboardButton::H
  82. "i", // KeyboardButton::I
  83. "j", // KeyboardButton::J
  84. "k", // KeyboardButton::K
  85. "l", // KeyboardButton::L
  86. "m", // KeyboardButton::M
  87. "n", // KeyboardButton::N
  88. "o", // KeyboardButton::O
  89. "p", // KeyboardButton::P
  90. "q", // KeyboardButton::Q
  91. "r", // KeyboardButton::R
  92. "s", // KeyboardButton::S
  93. "t", // KeyboardButton::T
  94. "u", // KeyboardButton::U
  95. "v", // KeyboardButton::V
  96. "w", // KeyboardButton::W
  97. "x", // KeyboardButton::X
  98. "y", // KeyboardButton::Y
  99. "z" // KeyboardButton::Z
  100. };
  101. CE_STATIC_ASSERT(CE_COUNTOF(s_keyboard_button_names) == KeyboardButton::COUNT);
  102. static const char* s_mouse_button_names[] =
  103. {
  104. "left", // MouseButton::LEFT
  105. "middle", // MouseButton::MIDDLE
  106. "right", // MouseButton::RIGHT
  107. "extra_1", // MouseButton::EXTRA_1
  108. "extra_2" // MouseButton::EXTRA_2
  109. };
  110. CE_STATIC_ASSERT(CE_COUNTOF(s_mouse_button_names) == MouseButton::COUNT);
  111. static const char* s_mouse_axis_names[] =
  112. {
  113. "cursor", // MouseAxis::CURSOR
  114. "cursor_delta", // MouseAxis::CURSOR_DELTA
  115. "wheel" // MouseAxis::WHEEL
  116. };
  117. CE_STATIC_ASSERT(CE_COUNTOF(s_mouse_axis_names) == MouseAxis::COUNT);
  118. static const char* s_touch_button_names[] =
  119. {
  120. "pointer_0", // TouchButton::POINTER_0
  121. "pointer_1", // TouchButton::POINTER_1
  122. "pointer_2", // TouchButton::POINTER_2
  123. "pointer_3" // TouchButton::POINTER_3
  124. };
  125. CE_STATIC_ASSERT(CE_COUNTOF(s_touch_button_names) == TouchButton::COUNT);
  126. static const char* s_pad_button_names[] =
  127. {
  128. "up", // JoypadButton::UP
  129. "down", // JoypadButton::DOWN
  130. "left", // JoypadButton::LEFT
  131. "right", // JoypadButton::RIGHT
  132. "start", // JoypadButton::START
  133. "back", // JoypadButton::BACK
  134. "guide", // JoypadButton::GUIDE
  135. "left_thumb", // JoypadButton::LEFT_THUMB
  136. "right_thumb", // JoypadButton::RIGHT_THUMB
  137. "left_shoulder", // JoypadButton::LEFT_SHOULDER
  138. "right_shoulder", // JoypadButton::RIGHT_SHOULDER
  139. "a", // JoypadButton::A
  140. "b", // JoypadButton::B
  141. "x", // JoypadButton::X
  142. "y" // JoypadButton::Y
  143. };
  144. CE_STATIC_ASSERT(CE_COUNTOF(s_pad_button_names) == JoypadButton::COUNT);
  145. static const char* s_pad_axis_names[] =
  146. {
  147. "left", // JoypadAxis::LEFT
  148. "right" // JoypadAxis::RIGHT
  149. };
  150. CE_STATIC_ASSERT(CE_COUNTOF(s_pad_axis_names) == JoypadAxis::COUNT);
  151. InputManager::InputManager()
  152. : _keyboard(NULL)
  153. , _mouse(NULL)
  154. , _touch(NULL)
  155. {
  156. _keyboard = InputDevice::create(default_allocator()
  157. , "Keyboard"
  158. , KeyboardButton::COUNT
  159. , 0
  160. , s_keyboard_button_names
  161. , NULL
  162. );
  163. _mouse = InputDevice::create(default_allocator()
  164. , "Mouse"
  165. , MouseButton::COUNT
  166. , MouseAxis::COUNT
  167. , s_mouse_button_names
  168. , s_mouse_axis_names
  169. );
  170. _touch = InputDevice::create(default_allocator()
  171. , "Touch"
  172. , TouchButton::COUNT
  173. , 0
  174. , s_touch_button_names
  175. , NULL
  176. );
  177. for (uint8_t i = 0; i < CROWN_MAX_JOYPADS; ++i)
  178. {
  179. _joypad[i] = InputDevice::create(default_allocator()
  180. , "Joypad"
  181. , JoypadButton::COUNT
  182. , JoypadAxis::COUNT
  183. , s_pad_button_names
  184. , s_pad_axis_names
  185. );
  186. }
  187. _keyboard->set_connected(true);
  188. _mouse->set_connected(true);
  189. _touch->set_connected(true);
  190. }
  191. InputManager::~InputManager()
  192. {
  193. for (uint8_t i = 0; i < CROWN_MAX_JOYPADS; ++i)
  194. InputDevice::destroy(default_allocator(), _joypad[i]);
  195. InputDevice::destroy(default_allocator(), _touch);
  196. InputDevice::destroy(default_allocator(), _mouse);
  197. InputDevice::destroy(default_allocator(), _keyboard);
  198. }
  199. InputDevice* InputManager::keyboard()
  200. {
  201. return _keyboard;
  202. }
  203. InputDevice* InputManager::mouse()
  204. {
  205. return _mouse;
  206. }
  207. InputDevice* InputManager::touch()
  208. {
  209. return _touch;
  210. }
  211. uint8_t InputManager::num_joypads()
  212. {
  213. return CE_COUNTOF(_joypad);
  214. }
  215. InputDevice* InputManager::joypad(uint8_t i)
  216. {
  217. CE_ASSERT(i < CROWN_MAX_JOYPADS, "Index out of bounds");
  218. return _joypad[i];
  219. }
  220. void InputManager::update()
  221. {
  222. _keyboard->update();
  223. _mouse->update();
  224. _touch->update();
  225. for (uint8_t i = 0; i < CROWN_MAX_JOYPADS; ++i)
  226. _joypad[i]->update();
  227. }
  228. } // namespace crown