| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- /*
- * Copyright (c) 2012-2017 Daniele Bartolini and individual contributors.
- * License: https://github.com/taylor001/crown/blob/master/LICENSE
- */
- #include "input_device.h"
- #include "input_manager.h"
- #include "memory.h"
- #include "vector3.h"
- namespace crown
- {
- static const char* s_keyboard_button_names[] =
- {
- "tab", // KeyboardButton::TAB
- "enter", // KeyboardButton::ENTER
- "escape", // KeyboardButton::ESCAPE
- "space", // KeyboardButton::SPACE
- "backspace", // KeyboardButton::BACKSPACE
- "num_lock", // KeyboardButton::NUM_LOCK
- "numpad_enter", // KeyboardButton::NUMPAD_ENTER
- "numpad_.", // KeyboardButton::NUMPAD_DELETE
- "numpad_*", // KeyboardButton::NUMPAD_MULTIPLY
- "numpad_+", // KeyboardButton::NUMPAD_ADD
- "numpad_-", // KeyboardButton::NUMPAD_SUBTRACT
- "numpad_/", // KeyboardButton::NUMPAD_DIVIDE
- "numpad_0", // KeyboardButton::NUMPAD_0
- "numpad_1", // KeyboardButton::NUMPAD_1
- "numpad_2", // KeyboardButton::NUMPAD_2
- "numpad_3", // KeyboardButton::NUMPAD_3
- "numpad_4", // KeyboardButton::NUMPAD_4
- "numpad_5", // KeyboardButton::NUMPAD_5
- "numpad_6", // KeyboardButton::NUMPAD_6
- "numpad_7", // KeyboardButton::NUMPAD_7
- "numpad_8", // KeyboardButton::NUMPAD_8
- "numpad_9", // KeyboardButton::NUMPAD_9
- "f1", // KeyboardButton::F1
- "f2", // KeyboardButton::F2
- "f3", // KeyboardButton::F3
- "f4", // KeyboardButton::F4
- "f5", // KeyboardButton::F5
- "f6", // KeyboardButton::F6
- "f7", // KeyboardButton::F7
- "f8", // KeyboardButton::F8
- "f9", // KeyboardButton::F9
- "f10", // KeyboardButton::F10
- "f11", // KeyboardButton::F11
- "f12", // KeyboardButton::F12
- "home", // KeyboardButton::HOME
- "left", // KeyboardButton::LEFT
- "up", // KeyboardButton::UP
- "right", // KeyboardButton::RIGHT
- "down", // KeyboardButton::DOWN
- "page_up", // KeyboardButton::PAGE_UP
- "page_down", // KeyboardButton::PAGE_DOWN
- "ins", // KeyboardButton::INS
- "del", // KeyboardButton::DEL
- "end", // KeyboardButton::END
- "ctrl_left", // KeyboardButton::CTRL_LEFT
- "ctrl_right", // KeyboardButton::CTRL_RIGHT
- "shift_left", // KeyboardButton::SHIFT_LEFT
- "shift_right", // KeyboardButton::SHIFT_RIGHT
- "caps_lock", // KeyboardButton::CAPS_LOCK
- "alt_left", // KeyboardButton::ALT_LEFT
- "alt_right", // KeyboardButton::ALT_RIGHT
- "super_left", // KeyboardButton::SUPER_LEFT
- "super_right", // KeyboardButton::SUPER_RIGHT
- "0", // KeyboardButton::NUMBER_0
- "1", // KeyboardButton::NUMBER_1
- "2", // KeyboardButton::NUMBER_2
- "3", // KeyboardButton::NUMBER_3
- "4", // KeyboardButton::NUMBER_4
- "5", // KeyboardButton::NUMBER_5
- "6", // KeyboardButton::NUMBER_6
- "7", // KeyboardButton::NUMBER_7
- "8", // KeyboardButton::NUMBER_8
- "9", // KeyboardButton::NUMBER_9
- "a", // KeyboardButton::A
- "b", // KeyboardButton::B
- "c", // KeyboardButton::C
- "d", // KeyboardButton::D
- "e", // KeyboardButton::E
- "f", // KeyboardButton::F
- "g", // KeyboardButton::G
- "h", // KeyboardButton::H
- "i", // KeyboardButton::I
- "j", // KeyboardButton::J
- "k", // KeyboardButton::K
- "l", // KeyboardButton::L
- "m", // KeyboardButton::M
- "n", // KeyboardButton::N
- "o", // KeyboardButton::O
- "p", // KeyboardButton::P
- "q", // KeyboardButton::Q
- "r", // KeyboardButton::R
- "s", // KeyboardButton::S
- "t", // KeyboardButton::T
- "u", // KeyboardButton::U
- "v", // KeyboardButton::V
- "w", // KeyboardButton::W
- "x", // KeyboardButton::X
- "y", // KeyboardButton::Y
- "z" // KeyboardButton::Z
- };
- CE_STATIC_ASSERT(countof(s_keyboard_button_names) == KeyboardButton::COUNT);
- static const char* s_mouse_button_names[] =
- {
- "left", // MouseButton::LEFT
- "middle", // MouseButton::MIDDLE
- "right", // MouseButton::RIGHT
- "extra_1", // MouseButton::EXTRA_1
- "extra_2" // MouseButton::EXTRA_2
- };
- CE_STATIC_ASSERT(countof(s_mouse_button_names) == MouseButton::COUNT);
- static const char* s_mouse_axis_names[] =
- {
- "cursor", // MouseAxis::CURSOR
- "cursor_delta", // MouseAxis::CURSOR_DELTA
- "wheel" // MouseAxis::WHEEL
- };
- CE_STATIC_ASSERT(countof(s_mouse_axis_names) == MouseAxis::COUNT);
- static const char* s_touch_button_names[] =
- {
- "pointer_0", // TouchButton::POINTER_0
- "pointer_1", // TouchButton::POINTER_1
- "pointer_2", // TouchButton::POINTER_2
- "pointer_3" // TouchButton::POINTER_3
- };
- CE_STATIC_ASSERT(countof(s_touch_button_names) == TouchButton::COUNT);
- static const char* s_touch_axis_names[] =
- {
- "pointer_0", // TouchAxis::POINTER_0
- "pointer_1", // TouchAxis::POINTER_1
- "pointer_2", // TouchAxis::POINTER_2
- "pointer_3" // TouchAxis::POINTER_3
- };
- CE_STATIC_ASSERT(countof(s_touch_axis_names) == TouchAxis::COUNT);
- static const char* s_pad_button_names[] =
- {
- "up", // JoypadButton::UP
- "down", // JoypadButton::DOWN
- "left", // JoypadButton::LEFT
- "right", // JoypadButton::RIGHT
- "start", // JoypadButton::START
- "back", // JoypadButton::BACK
- "guide", // JoypadButton::GUIDE
- "thumb_left", // JoypadButton::THUMB_LEFT
- "thumb_right", // JoypadButton::THUMB_RIGHT
- "shoulder_left", // JoypadButton::SHOULDER_LEFT
- "shoulder_right", // JoypadButton::SHOULDER_RIGHT
- "a", // JoypadButton::A
- "b", // JoypadButton::B
- "x", // JoypadButton::X
- "y" // JoypadButton::Y
- };
- CE_STATIC_ASSERT(countof(s_pad_button_names) == JoypadButton::COUNT);
- static const char* s_pad_axis_names[] =
- {
- "left", // JoypadAxis::LEFT
- "right" // JoypadAxis::RIGHT
- };
- CE_STATIC_ASSERT(countof(s_pad_axis_names) == JoypadAxis::COUNT);
- InputManager::InputManager(Allocator& a)
- : _allocator(&a)
- , _keyboard(NULL)
- , _mouse(NULL)
- , _touch(NULL)
- , _mouse_last_x(0)
- , _mouse_last_y(0)
- {
- _keyboard = input_device::create(*_allocator
- , "Keyboard"
- , KeyboardButton::COUNT
- , 0
- , s_keyboard_button_names
- , NULL
- );
- _mouse = input_device::create(*_allocator
- , "Mouse"
- , MouseButton::COUNT
- , MouseAxis::COUNT
- , s_mouse_button_names
- , s_mouse_axis_names
- );
- _touch = input_device::create(*_allocator
- , "Touch"
- , TouchButton::COUNT
- , TouchAxis::COUNT
- , s_touch_button_names
- , s_touch_axis_names
- );
- for (u8 i = 0; i < CROWN_MAX_JOYPADS; ++i)
- {
- _joypad[i] = input_device::create(*_allocator
- , "Joypad"
- , JoypadButton::COUNT
- , JoypadAxis::COUNT
- , s_pad_button_names
- , s_pad_axis_names
- );
- }
- _keyboard->set_connected(true);
- _mouse->set_connected(true);
- _touch->set_connected(true);
- }
- InputManager::~InputManager()
- {
- for (u8 i = 0; i < CROWN_MAX_JOYPADS; ++i)
- input_device::destroy(*_allocator, *_joypad[i]);
- input_device::destroy(*_allocator, *_touch);
- input_device::destroy(*_allocator, *_mouse);
- input_device::destroy(*_allocator, *_keyboard);
- }
- InputDevice* InputManager::keyboard()
- {
- return _keyboard;
- }
- InputDevice* InputManager::mouse()
- {
- return _mouse;
- }
- InputDevice* InputManager::touch()
- {
- return _touch;
- }
- u8 InputManager::num_joypads()
- {
- return countof(_joypad);
- }
- InputDevice* InputManager::joypad(u8 i)
- {
- CE_ASSERT(i < CROWN_MAX_JOYPADS, "Index out of bounds");
- return _joypad[i];
- }
- void InputManager::update()
- {
- _keyboard->update();
- const Vector3 cursor = _mouse->axis(MouseAxis::CURSOR);
- _mouse->set_axis(MouseAxis::CURSOR_DELTA, vector3((s16)cursor.x - _mouse_last_x, (s16)cursor.y - _mouse_last_y, 0.0f));
- _mouse_last_x = (s16)cursor.x;
- _mouse_last_y = (s16)cursor.y;
- _mouse->update();
- _touch->update();
- for (u8 i = 0; i < CROWN_MAX_JOYPADS; ++i)
- _joypad[i]->update();
- }
- } // namespace crown
|