@@ -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); | ||||