| @@ -101,7 +101,7 @@ liblol_core_sources = \ | |||||
| \ | \ | ||||
| audio/audio.cpp audio/sample.cpp \ | audio/audio.cpp audio/sample.cpp \ | ||||
| \ | \ | ||||
| ui/input.cpp ui/input.h ui/keys.inc \ | |||||
| ui/input.cpp ui/input.h ui/keys.inc ui/buttons.inc \ | |||||
| ui/controller.cpp ui/controller.h \ | ui/controller.cpp ui/controller.h \ | ||||
| ui/gui.cpp ui/gui.h \ | ui/gui.cpp ui/gui.h \ | ||||
| \ | \ | ||||
| @@ -287,6 +287,7 @@ | |||||
| <ClInclude Include="textureimage-private.h" /> | <ClInclude Include="textureimage-private.h" /> | ||||
| <ClInclude Include="textureimage.h" /> | <ClInclude Include="textureimage.h" /> | ||||
| <ClInclude Include="tileset.h" /> | <ClInclude Include="tileset.h" /> | ||||
| <ClInclude Include="ui\buttons.inc" /> | |||||
| <ClInclude Include="ui\controller.h" /> | <ClInclude Include="ui\controller.h" /> | ||||
| <ClInclude Include="ui\d3d9-input.h" /> | <ClInclude Include="ui\d3d9-input.h" /> | ||||
| <ClInclude Include="ui\gui.h" /> | <ClInclude Include="ui\gui.h" /> | ||||
| @@ -521,6 +521,9 @@ | |||||
| <ClInclude Include="textureimage-private.h" /> | <ClInclude Include="textureimage-private.h" /> | ||||
| <ClInclude Include="textureimage.h" /> | <ClInclude Include="textureimage.h" /> | ||||
| <ClInclude Include="tileset.h" /> | <ClInclude Include="tileset.h" /> | ||||
| <ClInclude Include="ui\buttons.inc"> | |||||
| <Filter>ui</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="ui\controller.h"> | <ClInclude Include="ui\controller.h"> | ||||
| <Filter>ui</Filter> | <Filter>ui</Filter> | ||||
| </ClInclude> | </ClInclude> | ||||
| @@ -0,0 +1,42 @@ | |||||
| // | |||||
| // Lol Engine | |||||
| // | |||||
| // Copyright © 2010—2019 Sam Hocevar <sam@hocevar.net> | |||||
| // | |||||
| // Lol Engine is free software. It comes without any warranty, to | |||||
| // the extent permitted by applicable law. You can redistribute it | |||||
| // and/or modify it under the terms of the Do What the Fuck You Want | |||||
| // to Public License, Version 2, as published by the WTFPL Task Force. | |||||
| // See http://www.wtfpl.net/ for more details. | |||||
| // | |||||
| #if !defined _BTN | |||||
| # error buttons.inc included without the _BTN macro | |||||
| #endif | |||||
| _BTN(0, Unknown) | |||||
| // Mouse buttons (FIXME: rename to LeftClick etc.?) | |||||
| _BTN(1, Left) | |||||
| _BTN(2, Right) | |||||
| _BTN(3, Middle) | |||||
| _BTN(4, Focus) | |||||
| // Typical game controller buttons | |||||
| _BTN(5, A) | |||||
| _BTN(6, B) | |||||
| _BTN(7, X) | |||||
| _BTN(8, Y) | |||||
| _BTN(9, DpadUp) | |||||
| _BTN(10, DpadDown) | |||||
| _BTN(11, DpadLeft) | |||||
| _BTN(12, DpadRight) | |||||
| _BTN(13, Start) | |||||
| _BTN(14, Back) | |||||
| _BTN(15, LeftThumb) | |||||
| _BTN(16, RightThumb) | |||||
| _BTN(17, LeftShoulder) | |||||
| _BTN(18, RightShoulder) | |||||
| #undef _BTN | |||||
| @@ -26,20 +26,6 @@ | |||||
| namespace lol | namespace lol | ||||
| { | { | ||||
| static const std::string g_name_xbox_key_dpad_up("DPadUp"); | |||||
| static const std::string g_name_xbox_key_dpad_down("DPadDown"); | |||||
| static const std::string g_name_xbox_key_dpad_left("DPadLeft"); | |||||
| static const std::string g_name_xbox_key_dpad_right("DPadRight"); | |||||
| static const std::string g_name_xbox_key_left_thumb("LeftThumb"); | |||||
| static const std::string g_name_xbox_key_right_thumb("RightThumb"); | |||||
| static const std::string g_name_xbox_key_left_shoulder("LeftShoulder"); | |||||
| static const std::string g_name_xbox_key_right_shoulder("Rightshoulder"); | |||||
| static const std::string g_name_xbox_key_a("A"); | |||||
| static const std::string g_name_xbox_key_b("B"); | |||||
| static const std::string g_name_xbox_key_x("X"); | |||||
| static const std::string g_name_xbox_key_y("Y"); | |||||
| static const std::string g_name_xbox_key_start("Start"); | |||||
| static const std::string g_name_xbox_key_back("Back"); | |||||
| static const std::string g_name_xbox_axis_left_x("Axis1"); | static const std::string g_name_xbox_axis_left_x("Axis1"); | ||||
| static const std::string g_name_xbox_axis_left_y("Axis2"); | static const std::string g_name_xbox_axis_left_y("Axis2"); | ||||
| static const std::string g_name_xbox_axis_right_x("Axis3"); | static const std::string g_name_xbox_axis_right_x("Axis3"); | ||||
| @@ -84,20 +70,8 @@ D3d9Input::D3d9Input() | |||||
| stick->AddAxis(g_name_xbox_axis_left_trigger.c_str()); | stick->AddAxis(g_name_xbox_axis_left_trigger.c_str()); | ||||
| stick->AddAxis(g_name_xbox_axis_right_trigger.c_str()); | stick->AddAxis(g_name_xbox_axis_right_trigger.c_str()); | ||||
| stick->AddKey(g_name_xbox_key_dpad_up.c_str()); | |||||
| stick->AddKey(g_name_xbox_key_dpad_down.c_str()); | |||||
| stick->AddKey(g_name_xbox_key_dpad_left.c_str()); | |||||
| stick->AddKey(g_name_xbox_key_dpad_right.c_str()); | |||||
| stick->AddKey(g_name_xbox_key_start.c_str()); | |||||
| stick->AddKey(g_name_xbox_key_back.c_str()); | |||||
| stick->AddKey(g_name_xbox_key_left_thumb.c_str()); | |||||
| stick->AddKey(g_name_xbox_key_right_thumb.c_str()); | |||||
| stick->AddKey(g_name_xbox_key_left_shoulder.c_str()); | |||||
| stick->AddKey(g_name_xbox_key_right_shoulder.c_str()); | |||||
| stick->AddKey(g_name_xbox_key_a.c_str()); | |||||
| stick->AddKey(g_name_xbox_key_b.c_str()); | |||||
| stick->AddKey(g_name_xbox_key_x.c_str()); | |||||
| stick->AddKey(g_name_xbox_key_y.c_str()); | |||||
| #define _BTN(id, name) stick->internal_add_button(input::button::BTN_##name, #name); | |||||
| #include "ui/buttons.inc" // FIXME: ignore mouse buttons here | |||||
| m_data->m_joysticks.push(i, stick); | m_data->m_joysticks.push(i, stick); | ||||
| } | } | ||||
| @@ -42,16 +42,13 @@ input::input() | |||||
| // Create default keyboard device | // Create default keyboard device | ||||
| m_keyboard = std::make_shared<InputDevice>(g_name_keyboard.c_str()); | m_keyboard = std::make_shared<InputDevice>(g_name_keyboard.c_str()); | ||||
| /* Register all scancodes known to SDL (from the USB standard) */ | /* Register all scancodes known to SDL (from the USB standard) */ | ||||
| # define _SC(id, str, name) m_keyboard->AddKey(id, #name); | |||||
| # include "ui/keys.inc" | |||||
| #define _SC(id, str, name) m_keyboard->internal_add_key(input::key::SC_##name, #name); | |||||
| #include "ui/keys.inc" | |||||
| // Create default mouse device | // Create default mouse device | ||||
| m_mouse = std::make_shared<InputDevice>(g_name_mouse.c_str()); | m_mouse = std::make_shared<InputDevice>(g_name_mouse.c_str()); | ||||
| m_mouse->AddButton((int)input::button::BTN_Left, g_name_mouse_key_left.c_str()); | |||||
| m_mouse->AddButton((int)input::button::BTN_Middle, g_name_mouse_key_middle.c_str()); | |||||
| m_mouse->AddButton((int)input::button::BTN_Right, g_name_mouse_key_right.c_str()); | |||||
| m_mouse->AddButton((int)input::button::BTN_Focus, g_name_mouse_key_in_screen.c_str()); | |||||
| // Added to manage if mouse is in the screen or not. | |||||
| #define _BTN(id, name) m_mouse->internal_add_button(input::button::BTN_##name, #name); | |||||
| #include "ui/buttons.inc" // FIXME: this will also add joystick buttons! | |||||
| m_mouse->AddAxis(g_name_mouse_axis_x.c_str()); | m_mouse->AddAxis(g_name_mouse_axis_x.c_str()); | ||||
| m_mouse->AddAxis(g_name_mouse_axis_y.c_str()); | m_mouse->AddAxis(g_name_mouse_axis_y.c_str()); | ||||
| m_mouse->AddAxis(g_name_mouse_axis_xpixel.c_str()); | m_mouse->AddAxis(g_name_mouse_axis_xpixel.c_str()); | ||||
| @@ -116,32 +113,26 @@ void InputDevice::capture_text(bool status) | |||||
| m_input_active = status; | m_input_active = status; | ||||
| } | } | ||||
| void InputDevice::AddKey(int index, const char* name) | |||||
| void InputDevice::internal_add_key(input::key key, const char* name) | |||||
| { | { | ||||
| if (index == -1) | |||||
| index = (int)m_key_names.size(); | |||||
| while (index >= (int)m_key_names.size()) | |||||
| while ((int)key >= (int)m_key_names.size()) | |||||
| { | { | ||||
| m_key_names.push_back(""); | m_key_names.push_back(""); | ||||
| m_keys.push_back(false); | m_keys.push_back(false); | ||||
| } | } | ||||
| m_key_names[index] = name; | |||||
| m_key_names[(int)key] = name; | |||||
| } | } | ||||
| void InputDevice::AddButton(int index, const char* name) | |||||
| void InputDevice::internal_add_button(input::button button, const char* name) | |||||
| { | { | ||||
| if (index == -1) | |||||
| index = (int)m_button_names.size(); | |||||
| while (index >= (int)m_button_names.size()) | |||||
| while ((int)button >= (int)m_button_names.size()) | |||||
| { | { | ||||
| m_button_names.push_back(""); | m_button_names.push_back(""); | ||||
| m_buttons.push_back(false); | m_buttons.push_back(false); | ||||
| } | } | ||||
| m_button_names[index] = name; | |||||
| m_button_names[(int)button] = name; | |||||
| } | } | ||||
| void InputDevice::AddAxis(int index, const char* name, float sensitivity) | void InputDevice::AddAxis(int index, const char* name, float sensitivity) | ||||
| @@ -58,10 +58,8 @@ public: | |||||
| enum class button : uint16_t | enum class button : uint16_t | ||||
| { | { | ||||
| BTN_Left, | |||||
| BTN_Right, | |||||
| BTN_Middle, | |||||
| BTN_Focus, | |||||
| #define _BTN(id, name) BTN_##name = id, | |||||
| #include "ui/buttons.inc" | |||||
| }; | }; | ||||
| static std::vector<key> const &all_keys(); | static std::vector<key> const &all_keys(); | ||||
| @@ -245,19 +243,8 @@ public: | |||||
| /** Internal functions that allow to construct an InputDevice | /** Internal functions that allow to construct an InputDevice | ||||
| * dynamically, when the keys, axis and cursors are not known at | * dynamically, when the keys, axis and cursors are not known at | ||||
| * compile time. */ | * compile time. */ | ||||
| void AddKey(int id, char const * name); | |||||
| inline void AddKey(char const * name) | |||||
| { | |||||
| AddKey(-1, name); | |||||
| } | |||||
| void AddButton(int id, char const * name); | |||||
| inline void AddButton(char const * name) | |||||
| { | |||||
| AddButton(-1, name); | |||||
| } | |||||
| void internal_add_key(input::key, char const * name); | |||||
| void internal_add_button(input::button, char const * name); | |||||
| void AddAxis(int id, char const * name, float sensitivity = 1.0f); | void AddAxis(int id, char const * name, float sensitivity = 1.0f); | ||||
| @@ -87,7 +87,7 @@ SdlInput::SdlInput(int app_w, int app_h, int screen_w, int screen_h) | |||||
| for (int j = 0; j < SDL_JoystickNumAxes(sdlstick); ++j) | for (int j = 0; j < SDL_JoystickNumAxes(sdlstick); ++j) | ||||
| stick->AddAxis(format("Axis%d", j + 1).c_str()); | stick->AddAxis(format("Axis%d", j + 1).c_str()); | ||||
| for (int j = 0; j < SDL_JoystickNumButtons(sdlstick); ++j) | for (int j = 0; j < SDL_JoystickNumButtons(sdlstick); ++j) | ||||
| stick->AddKey(format("Button%d", j + 1).c_str()); | |||||
| stick->internal_add_button((input::button)(j + 1), format("Button%d", j + 1).c_str()); | |||||
| m_joysticks.push(sdlstick, stick); | m_joysticks.push(sdlstick, stick); | ||||
| } | } | ||||
| @@ -200,7 +200,8 @@ void SdlInput::tick(float seconds) | |||||
| case SDL_MOUSEBUTTONDOWN: | case SDL_MOUSEBUTTONDOWN: | ||||
| case SDL_MOUSEBUTTONUP: | case SDL_MOUSEBUTTONUP: | ||||
| //event.button.which | //event.button.which | ||||
| mouse->internal_set_button((input::button)(event.button.button - 1), event.type == SDL_MOUSEBUTTONDOWN); | |||||
| mouse->internal_set_button((input::button)((int)input::button::BTN_Left + event.button.button - 1), | |||||
| event.type == SDL_MOUSEBUTTONDOWN); | |||||
| break; | break; | ||||
| case SDL_MOUSEWHEEL: | case SDL_MOUSEWHEEL: | ||||
| mouse->internal_set_axis(4, (float)event.button.y); | mouse->internal_set_axis(4, (float)event.button.y); | ||||