let ports set default controls (#795)

* start getting stuff in place to let ports set default controls

* naming

* sdl buttons

* axis direction to button mapping

* keyboard key to axis direction

* button to axis direction

* axis direction to axis direction

* remove now unused cmake kb mapping stuff

* fix a couple little things
This commit is contained in:
briaguya
2025-01-28 20:29:29 -05:00
committed by GitHub
parent 5341b01725
commit 50eb906f20
9 changed files with 342 additions and 175 deletions
-38
View File
@@ -21,25 +21,6 @@ set(CVAR_MENU_BAR_OPEN "gOpenMenuBar" CACHE STRING "")
set(CVAR_PREFIX_CONTROLLERS "gControllers" CACHE STRING "")
set(CVAR_PREFIX_ADVANCED_RESOLUTION "gAdvancedResolution" CACHE STRING "")
set(LUS_DEFAULT_KB_MAPPING_A KbScancode::LUS_KB_X CACHE STRING "")
set(LUS_DEFAULT_KB_MAPPING_B KbScancode::LUS_KB_C CACHE STRING "")
set(LUS_DEFAULT_KB_MAPPING_L KbScancode::LUS_KB_E CACHE STRING "")
set(LUS_DEFAULT_KB_MAPPING_R KbScancode::LUS_KB_R CACHE STRING "")
set(LUS_DEFAULT_KB_MAPPING_Z KbScancode::LUS_KB_Z CACHE STRING "")
set(LUS_DEFAULT_KB_MAPPING_START KbScancode::LUS_KB_SPACE CACHE STRING "")
set(LUS_DEFAULT_KB_MAPPING_STICKUP KbScancode::LUS_KB_W CACHE STRING "")
set(LUS_DEFAULT_KB_MAPPING_STICKDOWN KbScancode::LUS_KB_S CACHE STRING "")
set(LUS_DEFAULT_KB_MAPPING_STICKLEFT KbScancode::LUS_KB_A CACHE STRING "")
set(LUS_DEFAULT_KB_MAPPING_STICKRIGHT KbScancode::LUS_KB_D CACHE STRING "")
set(LUS_DEFAULT_KB_MAPPING_CUP KbScancode::LUS_KB_ARROWKEY_UP CACHE STRING "")
set(LUS_DEFAULT_KB_MAPPING_CDOWN KbScancode::LUS_KB_ARROWKEY_DOWN CACHE STRING "")
set(LUS_DEFAULT_KB_MAPPING_CLEFT KbScancode::LUS_KB_ARROWKEY_LEFT CACHE STRING "")
set(LUS_DEFAULT_KB_MAPPING_CRIGHT KbScancode::LUS_KB_ARROWKEY_RIGHT CACHE STRING "")
set(LUS_DEFAULT_KB_MAPPING_DUP KbScancode::LUS_KB_T CACHE STRING "")
set(LUS_DEFAULT_KB_MAPPING_DDOWN KbScancode::LUS_KB_G CACHE STRING "")
set(LUS_DEFAULT_KB_MAPPING_DLEFT KbScancode::LUS_KB_F CACHE STRING "")
set(LUS_DEFAULT_KB_MAPPING_DRIGHT KbScancode::LUS_KB_H CACHE STRING "")
add_compile_definitions(
CVAR_VSYNC_ENABLED="${CVAR_VSYNC_ENABLED}"
CVAR_Z_FIGHTING_MODE="${CVAR_Z_FIGHTING_MODE}"
@@ -63,23 +44,4 @@ add_compile_definitions(
CVAR_MENU_BAR_OPEN="${CVAR_MENU_BAR_OPEN}"
CVAR_PREFIX_CONTROLLERS="${CVAR_PREFIX_CONTROLLERS}"
CVAR_PREFIX_ADVANCED_RESOLUTION="${CVAR_PREFIX_ADVANCED_RESOLUTION}"
LUS_DEFAULT_KB_MAPPING_A=${LUS_DEFAULT_KB_MAPPING_A}
LUS_DEFAULT_KB_MAPPING_B=${LUS_DEFAULT_KB_MAPPING_B}
LUS_DEFAULT_KB_MAPPING_L=${LUS_DEFAULT_KB_MAPPING_L}
LUS_DEFAULT_KB_MAPPING_R=${LUS_DEFAULT_KB_MAPPING_R}
LUS_DEFAULT_KB_MAPPING_Z=${LUS_DEFAULT_KB_MAPPING_Z}
LUS_DEFAULT_KB_MAPPING_START=${LUS_DEFAULT_KB_MAPPING_START}
LUS_DEFAULT_KB_MAPPING_STICKUP=${LUS_DEFAULT_KB_MAPPING_STICKUP}
LUS_DEFAULT_KB_MAPPING_STICKDOWN=${LUS_DEFAULT_KB_MAPPING_STICKDOWN}
LUS_DEFAULT_KB_MAPPING_STICKLEFT=${LUS_DEFAULT_KB_MAPPING_STICKLEFT}
LUS_DEFAULT_KB_MAPPING_STICKRIGHT=${LUS_DEFAULT_KB_MAPPING_STICKRIGHT}
LUS_DEFAULT_KB_MAPPING_CUP=${LUS_DEFAULT_KB_MAPPING_CUP}
LUS_DEFAULT_KB_MAPPING_CDOWN=${LUS_DEFAULT_KB_MAPPING_CDOWN}
LUS_DEFAULT_KB_MAPPING_CLEFT=${LUS_DEFAULT_KB_MAPPING_CLEFT}
LUS_DEFAULT_KB_MAPPING_CRIGHT=${LUS_DEFAULT_KB_MAPPING_CRIGHT}
LUS_DEFAULT_KB_MAPPING_DUP=${LUS_DEFAULT_KB_MAPPING_DUP}
LUS_DEFAULT_KB_MAPPING_DDOWN=${LUS_DEFAULT_KB_MAPPING_DDOWN}
LUS_DEFAULT_KB_MAPPING_DLEFT=${LUS_DEFAULT_KB_MAPPING_DLEFT}
LUS_DEFAULT_KB_MAPPING_DRIGHT=${LUS_DEFAULT_KB_MAPPING_DRIGHT}
)
+15 -3
View File
@@ -9,9 +9,12 @@
namespace Ship {
ControlDeck::ControlDeck(std::vector<CONTROLLERBUTTONS_T> additionalBitmasks) {
ControlDeck::ControlDeck(std::vector<CONTROLLERBUTTONS_T> additionalBitmasks,
std::shared_ptr<ControllerDefaultMappings> controllerDefaultMappings) {
mConnectedPhysicalDeviceManager = std::make_shared<ConnectedPhysicalDeviceManager>();
mGlobalSDLDeviceSettings = std::make_shared<GlobalSDLDeviceSettings>();
mControllerDefaultMappings = controllerDefaultMappings == nullptr ? std::make_shared<ControllerDefaultMappings>()
: controllerDefaultMappings;
}
ControlDeck::~ControlDeck() {
@@ -110,16 +113,25 @@ std::shared_ptr<ConnectedPhysicalDeviceManager> ControlDeck::GetConnectedPhysica
std::shared_ptr<GlobalSDLDeviceSettings> ControlDeck::GetGlobalSDLDeviceSettings() {
return mGlobalSDLDeviceSettings;
}
std::shared_ptr<ControllerDefaultMappings> ControlDeck::GetControllerDefaultMappings() {
return mControllerDefaultMappings;
}
} // namespace Ship
namespace LUS {
ControlDeck::ControlDeck(std::vector<CONTROLLERBUTTONS_T> additionalBitmasks)
: Ship::ControlDeck(additionalBitmasks), mPads(nullptr) {
ControlDeck::ControlDeck(std::vector<CONTROLLERBUTTONS_T> additionalBitmasks,
std::shared_ptr<Ship::ControllerDefaultMappings> controllerDefaultMappings)
: Ship::ControlDeck(additionalBitmasks, controllerDefaultMappings), mPads(nullptr) {
for (int32_t i = 0; i < MAXCONTROLLERS; i++) {
mPorts.push_back(std::make_shared<Ship::ControlPort>(i, std::make_shared<Controller>(i, additionalBitmasks)));
}
}
ControlDeck::ControlDeck(std::vector<CONTROLLERBUTTONS_T> additionalBitmasks)
: ControlDeck(additionalBitmasks, nullptr) {
}
ControlDeck::ControlDeck() : ControlDeck(std::vector<CONTROLLERBUTTONS_T>()) {
}
+7 -1
View File
@@ -6,12 +6,14 @@
#include "controller/controldevice/controller/mapping/keyboard/KeyboardScancodes.h"
#include "controller/physicaldevice/ConnectedPhysicalDeviceManager.h"
#include "controller/physicaldevice/GlobalSDLDeviceSettings.h"
#include "controller/controldevice/controller/mapping/ControllerDefaultMappings.h"
namespace Ship {
class ControlDeck {
public:
ControlDeck(std::vector<CONTROLLERBUTTONS_T> additionalBitmasks);
ControlDeck(std::vector<CONTROLLERBUTTONS_T> additionalBitmasks,
std::shared_ptr<ControllerDefaultMappings> controllerDefaultMappings);
~ControlDeck();
void Init(uint8_t* controllerBits);
@@ -28,6 +30,7 @@ class ControlDeck {
std::shared_ptr<ConnectedPhysicalDeviceManager> GetConnectedPhysicalDeviceManager();
std::shared_ptr<GlobalSDLDeviceSettings> GetGlobalSDLDeviceSettings();
std::shared_ptr<ControllerDefaultMappings> GetControllerDefaultMappings();
protected:
bool AllGameInputBlocked();
@@ -38,6 +41,7 @@ class ControlDeck {
std::unordered_map<int32_t, bool> mGameInputBlockers;
std::shared_ptr<ConnectedPhysicalDeviceManager> mConnectedPhysicalDeviceManager;
std::shared_ptr<GlobalSDLDeviceSettings> mGlobalSDLDeviceSettings;
std::shared_ptr<ControllerDefaultMappings> mControllerDefaultMappings;
};
} // namespace Ship
@@ -46,6 +50,8 @@ class ControlDeck : public Ship::ControlDeck {
public:
ControlDeck();
ControlDeck(std::vector<CONTROLLERBUTTONS_T> additionalBitmasks);
ControlDeck(std::vector<CONTROLLERBUTTONS_T> additionalBitmasks,
std::shared_ptr<Ship::ControllerDefaultMappings> controllerDefaultMappings);
OSContPad* GetPads();
void WriteToPad(void* pad) override;
@@ -107,6 +107,7 @@ void Controller::AddDefaultMappings(PhysicalDeviceType physicalDeviceType) {
button->AddDefaultMappings(physicalDeviceType);
}
GetLeftStick()->AddDefaultMappings(physicalDeviceType);
GetRightStick()->AddDefaultMappings(physicalDeviceType);
GetRumble()->AddDefaultMappings(physicalDeviceType);
const std::string hasConfigCvarKey =
@@ -266,8 +266,10 @@ bool ControllerButton::ProcessMouseButtonEvent(bool isPressed, MouseBtn button)
}
void ControllerButton::AddDefaultMappings(PhysicalDeviceType physicalDeviceType) {
for (auto mapping : ButtonMappingFactory::CreateDefaultSDLButtonMappings(mPortIndex, mBitmask)) {
AddButtonMapping(mapping);
if (physicalDeviceType == PhysicalDeviceType::SDLGamepad) {
for (auto mapping : ButtonMappingFactory::CreateDefaultSDLButtonMappings(mPortIndex, mBitmask)) {
AddButtonMapping(mapping);
}
}
if (physicalDeviceType == PhysicalDeviceType::Keyboard) {
@@ -0,0 +1,174 @@
#include "ControllerDefaultMappings.h"
#include "libultraship/libultra/controller.h"
namespace Ship {
ControllerDefaultMappings::ControllerDefaultMappings(
std::unordered_map<CONTROLLERBUTTONS_T, std::unordered_set<KbScancode>> defaultKeyboardKeyToButtonMappings,
std::unordered_map<StickIndex, std::vector<std::pair<Direction, KbScancode>>>
defaultKeyboardKeyToAxisDirectionMappings,
std::unordered_map<CONTROLLERBUTTONS_T, std::unordered_set<SDL_GameControllerButton>>
defaultSDLButtonToButtonMappings,
std::unordered_map<StickIndex, std::vector<std::pair<Direction, SDL_GameControllerButton>>>
defaultSDLButtonToAxisDirectionMappings,
std::unordered_map<CONTROLLERBUTTONS_T, std::vector<std::pair<SDL_GameControllerAxis, int32_t>>>
defaultSDLAxisDirectionToButtonMappings,
std::unordered_map<StickIndex, std::vector<std::pair<Direction, std::pair<SDL_GameControllerAxis, int32_t>>>>
defaultSDLAxisDirectionToAxisDirectionMappings) {
SetDefaultKeyboardKeyToButtonMappings(defaultKeyboardKeyToButtonMappings);
SetDefaultKeyboardKeyToAxisDirectionMappings(defaultKeyboardKeyToAxisDirectionMappings);
SetDefaultSDLButtonToButtonMappings(defaultSDLButtonToButtonMappings);
SetDefaultSDLButtonToAxisDirectionMappings(defaultSDLButtonToAxisDirectionMappings);
SetDefaultSDLAxisDirectionToButtonMappings(defaultSDLAxisDirectionToButtonMappings);
SetDefaultSDLAxisDirectionToAxisDirectionMappings(defaultSDLAxisDirectionToAxisDirectionMappings);
}
ControllerDefaultMappings::ControllerDefaultMappings()
: ControllerDefaultMappings(
std::unordered_map<CONTROLLERBUTTONS_T, std::unordered_set<KbScancode>>(),
std::unordered_map<StickIndex, std::vector<std::pair<Direction, KbScancode>>>(),
std::unordered_map<CONTROLLERBUTTONS_T, std::unordered_set<SDL_GameControllerButton>>(),
std::unordered_map<StickIndex, std::vector<std::pair<Direction, SDL_GameControllerButton>>>(),
std::unordered_map<CONTROLLERBUTTONS_T, std::vector<std::pair<SDL_GameControllerAxis, int32_t>>>(),
std::unordered_map<StickIndex,
std::vector<std::pair<Direction, std::pair<SDL_GameControllerAxis, int32_t>>>>()) {
}
ControllerDefaultMappings::~ControllerDefaultMappings() {
}
std::unordered_map<CONTROLLERBUTTONS_T, std::unordered_set<KbScancode>>
ControllerDefaultMappings::GetDefaultKeyboardKeyToButtonMappings() {
return mDefaultKeyboardKeyToButtonMappings;
}
void ControllerDefaultMappings::SetDefaultKeyboardKeyToButtonMappings(
std::unordered_map<CONTROLLERBUTTONS_T, std::unordered_set<KbScancode>> defaultKeyboardKeyToButtonMappings) {
if (!defaultKeyboardKeyToButtonMappings.empty()) {
mDefaultKeyboardKeyToButtonMappings = defaultKeyboardKeyToButtonMappings;
return;
}
mDefaultKeyboardKeyToButtonMappings[BTN_A] = { KbScancode::LUS_KB_X };
mDefaultKeyboardKeyToButtonMappings[BTN_B] = { KbScancode::LUS_KB_C };
mDefaultKeyboardKeyToButtonMappings[BTN_L] = { KbScancode::LUS_KB_E };
mDefaultKeyboardKeyToButtonMappings[BTN_R] = { KbScancode::LUS_KB_R };
mDefaultKeyboardKeyToButtonMappings[BTN_Z] = { KbScancode::LUS_KB_Z };
mDefaultKeyboardKeyToButtonMappings[BTN_START] = { KbScancode::LUS_KB_SPACE };
mDefaultKeyboardKeyToButtonMappings[BTN_CUP] = { KbScancode::LUS_KB_ARROWKEY_UP };
mDefaultKeyboardKeyToButtonMappings[BTN_CDOWN] = { KbScancode::LUS_KB_ARROWKEY_DOWN };
mDefaultKeyboardKeyToButtonMappings[BTN_CLEFT] = { KbScancode::LUS_KB_ARROWKEY_LEFT };
mDefaultKeyboardKeyToButtonMappings[BTN_CRIGHT] = { KbScancode::LUS_KB_ARROWKEY_RIGHT };
mDefaultKeyboardKeyToButtonMappings[BTN_DUP] = { KbScancode::LUS_KB_T };
mDefaultKeyboardKeyToButtonMappings[BTN_DDOWN] = { KbScancode::LUS_KB_G };
mDefaultKeyboardKeyToButtonMappings[BTN_DLEFT] = { KbScancode::LUS_KB_F };
mDefaultKeyboardKeyToButtonMappings[BTN_DRIGHT] = { KbScancode::LUS_KB_H };
}
std::unordered_map<StickIndex, std::vector<std::pair<Direction, KbScancode>>>
ControllerDefaultMappings::GetDefaultKeyboardKeyToAxisDirectionMappings() {
return mDefaultKeyboardKeyToAxisDirectionMappings;
}
void ControllerDefaultMappings::SetDefaultKeyboardKeyToAxisDirectionMappings(
std::unordered_map<StickIndex, std::vector<std::pair<Direction, KbScancode>>>
defaultKeyboardKeyToAxisDirectionMappings) {
if (!defaultKeyboardKeyToAxisDirectionMappings.empty()) {
mDefaultKeyboardKeyToAxisDirectionMappings = defaultKeyboardKeyToAxisDirectionMappings;
return;
}
mDefaultKeyboardKeyToAxisDirectionMappings[LEFT_STICK] = { { LEFT, KbScancode::LUS_KB_A },
{ RIGHT, KbScancode::LUS_KB_D },
{ UP, KbScancode::LUS_KB_W },
{ DOWN, KbScancode::LUS_KB_S } };
}
std::unordered_map<CONTROLLERBUTTONS_T, std::unordered_set<SDL_GameControllerButton>>
ControllerDefaultMappings::GetDefaultSDLButtonToButtonMappings() {
return mDefaultSDLButtonToButtonMappings;
}
void ControllerDefaultMappings::SetDefaultSDLButtonToButtonMappings(
std::unordered_map<CONTROLLERBUTTONS_T, std::unordered_set<SDL_GameControllerButton>>
defaultSDLButtonToButtonMappings) {
if (!defaultSDLButtonToButtonMappings.empty()) {
mDefaultSDLButtonToButtonMappings = defaultSDLButtonToButtonMappings;
return;
}
mDefaultSDLButtonToButtonMappings[BTN_A] = { SDL_CONTROLLER_BUTTON_A };
mDefaultSDLButtonToButtonMappings[BTN_B] = { SDL_CONTROLLER_BUTTON_B };
mDefaultSDLButtonToButtonMappings[BTN_L] = { SDL_CONTROLLER_BUTTON_LEFTSHOULDER };
mDefaultSDLButtonToButtonMappings[BTN_START] = { SDL_CONTROLLER_BUTTON_START };
mDefaultSDLButtonToButtonMappings[BTN_DUP] = { SDL_CONTROLLER_BUTTON_DPAD_UP };
mDefaultSDLButtonToButtonMappings[BTN_DDOWN] = { SDL_CONTROLLER_BUTTON_DPAD_DOWN };
mDefaultSDLButtonToButtonMappings[BTN_DLEFT] = { SDL_CONTROLLER_BUTTON_DPAD_LEFT };
mDefaultSDLButtonToButtonMappings[BTN_DRIGHT] = { SDL_CONTROLLER_BUTTON_DPAD_RIGHT };
}
std::unordered_map<StickIndex, std::vector<std::pair<Direction, SDL_GameControllerButton>>>
ControllerDefaultMappings::GetDefaultSDLButtonToAxisDirectionMappings() {
return mDefaultSDLButtonToAxisDirectionMappings;
}
void ControllerDefaultMappings::SetDefaultSDLButtonToAxisDirectionMappings(
std::unordered_map<StickIndex, std::vector<std::pair<Direction, SDL_GameControllerButton>>>
defaultSDLButtonToAxisDirectionMappings) {
if (!defaultSDLButtonToAxisDirectionMappings.empty()) {
mDefaultSDLButtonToAxisDirectionMappings = defaultSDLButtonToAxisDirectionMappings;
return;
}
}
std::unordered_map<CONTROLLERBUTTONS_T, std::vector<std::pair<SDL_GameControllerAxis, int32_t>>>
ControllerDefaultMappings::GetDefaultSDLAxisDirectionToButtonMappings() {
return mDefaultSDLAxisDirectionToButtonMappings;
}
void ControllerDefaultMappings::SetDefaultSDLAxisDirectionToButtonMappings(
std::unordered_map<CONTROLLERBUTTONS_T, std::vector<std::pair<SDL_GameControllerAxis, int32_t>>>
defaultSDLAxisDirectionToButtonMappings) {
if (!defaultSDLAxisDirectionToButtonMappings.empty()) {
mDefaultSDLAxisDirectionToButtonMappings = defaultSDLAxisDirectionToButtonMappings;
return;
}
mDefaultSDLAxisDirectionToButtonMappings[BTN_R] = { { SDL_CONTROLLER_AXIS_TRIGGERRIGHT, 1 } };
mDefaultSDLAxisDirectionToButtonMappings[BTN_Z] = { { SDL_CONTROLLER_AXIS_TRIGGERLEFT, 1 } };
mDefaultSDLAxisDirectionToButtonMappings[BTN_CUP] = { { SDL_CONTROLLER_AXIS_RIGHTY, -1 } };
mDefaultSDLAxisDirectionToButtonMappings[BTN_CDOWN] = { { SDL_CONTROLLER_AXIS_RIGHTY, 1 } };
mDefaultSDLAxisDirectionToButtonMappings[BTN_CLEFT] = { { SDL_CONTROLLER_AXIS_RIGHTX, -1 } };
mDefaultSDLAxisDirectionToButtonMappings[BTN_CRIGHT] = { { SDL_CONTROLLER_AXIS_RIGHTX, 1 } };
}
std::unordered_map<StickIndex, std::vector<std::pair<Direction, std::pair<SDL_GameControllerAxis, int32_t>>>>
ControllerDefaultMappings::GetDefaultSDLAxisDirectionToAxisDirectionMappings() {
return mDefaultSDLAxisDirectionToAxisDirectionMappings;
}
void ControllerDefaultMappings::SetDefaultSDLAxisDirectionToAxisDirectionMappings(
std::unordered_map<StickIndex, std::vector<std::pair<Direction, std::pair<SDL_GameControllerAxis, int32_t>>>>
defaultSDLAxisDirectionToAxisDirectionMappings) {
if (!defaultSDLAxisDirectionToAxisDirectionMappings.empty()) {
mDefaultSDLAxisDirectionToAxisDirectionMappings = defaultSDLAxisDirectionToAxisDirectionMappings;
return;
}
mDefaultSDLAxisDirectionToAxisDirectionMappings[LEFT_STICK] = {
{ LEFT, { SDL_CONTROLLER_AXIS_LEFTX, -1 } },
{ RIGHT, { SDL_CONTROLLER_AXIS_LEFTX, 1 } },
{ UP, { SDL_CONTROLLER_AXIS_LEFTY, -1 } },
{ DOWN, { SDL_CONTROLLER_AXIS_LEFTY, 1 } },
};
mDefaultSDLAxisDirectionToAxisDirectionMappings[RIGHT_STICK] = {
{ LEFT, { SDL_CONTROLLER_AXIS_RIGHTX, -1 } },
{ RIGHT, { SDL_CONTROLLER_AXIS_RIGHTX, 1 } },
{ UP, { SDL_CONTROLLER_AXIS_RIGHTY, -1 } },
{ DOWN, { SDL_CONTROLLER_AXIS_RIGHTY, 1 } },
};
}
} // namespace Ship
@@ -0,0 +1,84 @@
#pragma once
#include <cstdint>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include <SDL2/SDL.h>
#include "ControllerAxisDirectionMapping.h"
#ifndef CONTROLLERBUTTONS_T
#define CONTROLLERBUTTONS_T uint16_t
#endif
#include "controller/controldevice/controller/mapping/keyboard/KeyboardScancodes.h"
namespace Ship {
class ControllerDefaultMappings {
public:
ControllerDefaultMappings(
std::unordered_map<CONTROLLERBUTTONS_T, std::unordered_set<KbScancode>> defaultKeyboardKeyToButtonMappings,
std::unordered_map<StickIndex, std::vector<std::pair<Direction, KbScancode>>>
defaultKeyboardKeyToAxisDirectionMappings,
std::unordered_map<CONTROLLERBUTTONS_T, std::unordered_set<SDL_GameControllerButton>>
defaultSDLButtonToButtonMappings,
std::unordered_map<StickIndex, std::vector<std::pair<Direction, SDL_GameControllerButton>>>
defaultSDLButtonToAxisDirectionMappings,
std::unordered_map<CONTROLLERBUTTONS_T, std::vector<std::pair<SDL_GameControllerAxis, int32_t>>>
defaultSDLAxisDirectionToButtonMappings,
std::unordered_map<StickIndex, std::vector<std::pair<Direction, std::pair<SDL_GameControllerAxis, int32_t>>>>
defaultSDLAxisDirectionToAxisDirectionMappings);
ControllerDefaultMappings();
~ControllerDefaultMappings();
std::unordered_map<CONTROLLERBUTTONS_T, std::unordered_set<KbScancode>> GetDefaultKeyboardKeyToButtonMappings();
std::unordered_map<StickIndex, std::vector<std::pair<Direction, KbScancode>>>
GetDefaultKeyboardKeyToAxisDirectionMappings();
std::unordered_map<CONTROLLERBUTTONS_T, std::unordered_set<SDL_GameControllerButton>>
GetDefaultSDLButtonToButtonMappings();
std::unordered_map<StickIndex, std::vector<std::pair<Direction, SDL_GameControllerButton>>>
GetDefaultSDLButtonToAxisDirectionMappings();
std::unordered_map<CONTROLLERBUTTONS_T, std::vector<std::pair<SDL_GameControllerAxis, int32_t>>>
GetDefaultSDLAxisDirectionToButtonMappings();
std::unordered_map<StickIndex, std::vector<std::pair<Direction, std::pair<SDL_GameControllerAxis, int32_t>>>>
GetDefaultSDLAxisDirectionToAxisDirectionMappings();
private:
void SetDefaultKeyboardKeyToButtonMappings(
std::unordered_map<CONTROLLERBUTTONS_T, std::unordered_set<KbScancode>> defaultKeyboardKeyToButtonMappings);
std::unordered_map<CONTROLLERBUTTONS_T, std::unordered_set<KbScancode>> mDefaultKeyboardKeyToButtonMappings;
void SetDefaultKeyboardKeyToAxisDirectionMappings(
std::unordered_map<StickIndex, std::vector<std::pair<Direction, KbScancode>>>
defaultKeyboardKeyToAxisDirectionMappings);
std::unordered_map<StickIndex, std::vector<std::pair<Direction, KbScancode>>>
mDefaultKeyboardKeyToAxisDirectionMappings;
void SetDefaultSDLButtonToButtonMappings(
std::unordered_map<CONTROLLERBUTTONS_T, std::unordered_set<SDL_GameControllerButton>>
defaultSDLButtonToButtonMappings);
std::unordered_map<CONTROLLERBUTTONS_T, std::unordered_set<SDL_GameControllerButton>>
mDefaultSDLButtonToButtonMappings;
void SetDefaultSDLButtonToAxisDirectionMappings(
std::unordered_map<StickIndex, std::vector<std::pair<Direction, SDL_GameControllerButton>>>
defaultSDLButtonToAxisDirectionMappings);
std::unordered_map<StickIndex, std::vector<std::pair<Direction, SDL_GameControllerButton>>>
mDefaultSDLButtonToAxisDirectionMappings;
void SetDefaultSDLAxisDirectionToButtonMappings(
std::unordered_map<CONTROLLERBUTTONS_T, std::vector<std::pair<SDL_GameControllerAxis, int32_t>>>
defaultSDLAxisDirectionToButtonMappings);
std::unordered_map<CONTROLLERBUTTONS_T, std::vector<std::pair<SDL_GameControllerAxis, int32_t>>>
mDefaultSDLAxisDirectionToButtonMappings;
void SetDefaultSDLAxisDirectionToAxisDirectionMappings(
std::unordered_map<StickIndex, std::vector<std::pair<Direction, std::pair<SDL_GameControllerAxis, int32_t>>>>
defaultSDLAxisDirectionToAxisDirectionMappings);
std::unordered_map<StickIndex, std::vector<std::pair<Direction, std::pair<SDL_GameControllerAxis, int32_t>>>>
mDefaultSDLAxisDirectionToAxisDirectionMappings;
};
} // namespace Ship
@@ -109,31 +109,45 @@ AxisDirectionMappingFactory::CreateAxisDirectionMappingFromConfig(uint8_t portIn
std::vector<std::shared_ptr<ControllerAxisDirectionMapping>>
AxisDirectionMappingFactory::CreateDefaultKeyboardAxisDirectionMappings(uint8_t portIndex, StickIndex stickIndex) {
std::vector<std::shared_ptr<ControllerAxisDirectionMapping>> mappings = {
std::make_shared<KeyboardKeyToAxisDirectionMapping>(portIndex, stickIndex, LEFT,
LUS_DEFAULT_KB_MAPPING_STICKLEFT),
std::make_shared<KeyboardKeyToAxisDirectionMapping>(portIndex, stickIndex, RIGHT,
LUS_DEFAULT_KB_MAPPING_STICKRIGHT),
std::make_shared<KeyboardKeyToAxisDirectionMapping>(portIndex, stickIndex, UP, LUS_DEFAULT_KB_MAPPING_STICKUP),
std::make_shared<KeyboardKeyToAxisDirectionMapping>(portIndex, stickIndex, DOWN,
LUS_DEFAULT_KB_MAPPING_STICKDOWN)
};
std::vector<std::shared_ptr<ControllerAxisDirectionMapping>> mappings;
auto defaultsForStick = Context::GetInstance()
->GetControlDeck()
->GetControllerDefaultMappings()
->GetDefaultKeyboardKeyToAxisDirectionMappings()[stickIndex];
for (const auto& [direction, scancode] : defaultsForStick) {
mappings.push_back(
std::make_shared<KeyboardKeyToAxisDirectionMapping>(portIndex, stickIndex, direction, scancode));
}
return mappings;
}
std::vector<std::shared_ptr<ControllerAxisDirectionMapping>>
AxisDirectionMappingFactory::CreateDefaultSDLAxisDirectionMappings(uint8_t portIndex, StickIndex stickIndex) {
std::vector<std::shared_ptr<ControllerAxisDirectionMapping>> mappings = {
std::make_shared<SDLAxisDirectionToAxisDirectionMapping>(portIndex, stickIndex, LEFT,
stickIndex == LEFT_STICK ? 0 : 2, -1),
std::make_shared<SDLAxisDirectionToAxisDirectionMapping>(portIndex, stickIndex, RIGHT,
stickIndex == LEFT_STICK ? 0 : 2, 1),
std::make_shared<SDLAxisDirectionToAxisDirectionMapping>(portIndex, stickIndex, UP,
stickIndex == LEFT_STICK ? 1 : 3, -1),
std::make_shared<SDLAxisDirectionToAxisDirectionMapping>(portIndex, stickIndex, DOWN,
stickIndex == LEFT_STICK ? 1 : 3, 1)
};
std::vector<std::shared_ptr<ControllerAxisDirectionMapping>> mappings;
auto defaultButtonsForStick = Context::GetInstance()
->GetControlDeck()
->GetControllerDefaultMappings()
->GetDefaultSDLButtonToAxisDirectionMappings()[stickIndex];
for (const auto& [direction, sdlGamepadButton] : defaultButtonsForStick) {
mappings.push_back(
std::make_shared<SDLButtonToAxisDirectionMapping>(portIndex, stickIndex, direction, sdlGamepadButton));
}
auto defaultAxisDirectionsForStick = Context::GetInstance()
->GetControlDeck()
->GetControllerDefaultMappings()
->GetDefaultSDLAxisDirectionToAxisDirectionMappings()[stickIndex];
for (const auto& [direction, sdlGamepadAxisDirection] : defaultAxisDirectionsForStick) {
auto [sdlGamepadAxis, sdlGamepadDirection] = sdlGamepadAxisDirection;
mappings.push_back(std::make_shared<SDLAxisDirectionToAxisDirectionMapping>(
portIndex, stickIndex, direction, sdlGamepadAxis, sdlGamepadDirection));
}
return mappings;
}
@@ -84,63 +84,13 @@ std::vector<std::shared_ptr<ControllerButtonMapping>>
ButtonMappingFactory::CreateDefaultKeyboardButtonMappings(uint8_t portIndex, CONTROLLERBUTTONS_T bitmask) {
std::vector<std::shared_ptr<ControllerButtonMapping>> mappings;
switch (bitmask) {
case BTN_A:
mappings.push_back(
std::make_shared<KeyboardKeyToButtonMapping>(portIndex, BTN_A, LUS_DEFAULT_KB_MAPPING_A));
break;
case BTN_B:
mappings.push_back(
std::make_shared<KeyboardKeyToButtonMapping>(portIndex, BTN_B, LUS_DEFAULT_KB_MAPPING_B));
break;
case BTN_L:
mappings.push_back(
std::make_shared<KeyboardKeyToButtonMapping>(portIndex, BTN_L, LUS_DEFAULT_KB_MAPPING_L));
break;
case BTN_R:
mappings.push_back(
std::make_shared<KeyboardKeyToButtonMapping>(portIndex, BTN_R, LUS_DEFAULT_KB_MAPPING_R));
break;
case BTN_Z:
mappings.push_back(
std::make_shared<KeyboardKeyToButtonMapping>(portIndex, BTN_Z, LUS_DEFAULT_KB_MAPPING_Z));
break;
case BTN_START:
mappings.push_back(
std::make_shared<KeyboardKeyToButtonMapping>(portIndex, BTN_START, LUS_DEFAULT_KB_MAPPING_START));
break;
case BTN_CUP:
mappings.push_back(
std::make_shared<KeyboardKeyToButtonMapping>(portIndex, BTN_CUP, LUS_DEFAULT_KB_MAPPING_CUP));
break;
case BTN_CDOWN:
mappings.push_back(
std::make_shared<KeyboardKeyToButtonMapping>(portIndex, BTN_CDOWN, LUS_DEFAULT_KB_MAPPING_CDOWN));
break;
case BTN_CLEFT:
mappings.push_back(
std::make_shared<KeyboardKeyToButtonMapping>(portIndex, BTN_CLEFT, LUS_DEFAULT_KB_MAPPING_CLEFT));
break;
case BTN_CRIGHT:
mappings.push_back(
std::make_shared<KeyboardKeyToButtonMapping>(portIndex, BTN_CRIGHT, LUS_DEFAULT_KB_MAPPING_CRIGHT));
break;
case BTN_DUP:
mappings.push_back(
std::make_shared<KeyboardKeyToButtonMapping>(portIndex, BTN_DUP, LUS_DEFAULT_KB_MAPPING_DUP));
break;
case BTN_DDOWN:
mappings.push_back(
std::make_shared<KeyboardKeyToButtonMapping>(portIndex, BTN_DDOWN, LUS_DEFAULT_KB_MAPPING_DDOWN));
break;
case BTN_DLEFT:
mappings.push_back(
std::make_shared<KeyboardKeyToButtonMapping>(portIndex, BTN_DLEFT, LUS_DEFAULT_KB_MAPPING_DLEFT));
break;
case BTN_DRIGHT:
mappings.push_back(
std::make_shared<KeyboardKeyToButtonMapping>(portIndex, BTN_DRIGHT, LUS_DEFAULT_KB_MAPPING_DRIGHT));
break;
auto defaultsForBitmask = Context::GetInstance()
->GetControlDeck()
->GetControllerDefaultMappings()
->GetDefaultKeyboardKeyToButtonMappings()[bitmask];
for (const auto& scancode : defaultsForBitmask) {
mappings.push_back(std::make_shared<KeyboardKeyToButtonMapping>(portIndex, bitmask, scancode));
}
return mappings;
@@ -150,61 +100,23 @@ std::vector<std::shared_ptr<ControllerButtonMapping>>
ButtonMappingFactory::CreateDefaultSDLButtonMappings(uint8_t portIndex, CONTROLLERBUTTONS_T bitmask) {
std::vector<std::shared_ptr<ControllerButtonMapping>> mappings;
switch (bitmask) {
case BTN_A:
mappings.push_back(std::make_shared<SDLButtonToButtonMapping>(portIndex, BTN_A, SDL_CONTROLLER_BUTTON_A));
break;
case BTN_B:
mappings.push_back(std::make_shared<SDLButtonToButtonMapping>(portIndex, BTN_B, SDL_CONTROLLER_BUTTON_B));
break;
case BTN_L:
mappings.push_back(
std::make_shared<SDLButtonToButtonMapping>(portIndex, BTN_L, SDL_CONTROLLER_BUTTON_LEFTSHOULDER));
break;
case BTN_R:
mappings.push_back(std::make_shared<SDLAxisDirectionToButtonMapping>(portIndex, BTN_R,
SDL_CONTROLLER_AXIS_TRIGGERRIGHT, 1));
break;
case BTN_Z:
mappings.push_back(std::make_shared<SDLAxisDirectionToButtonMapping>(portIndex, BTN_Z,
SDL_CONTROLLER_AXIS_TRIGGERLEFT, 1));
break;
case BTN_START:
mappings.push_back(
std::make_shared<SDLButtonToButtonMapping>(portIndex, BTN_START, SDL_CONTROLLER_BUTTON_START));
break;
case BTN_CUP:
mappings.push_back(
std::make_shared<SDLAxisDirectionToButtonMapping>(portIndex, BTN_CUP, SDL_CONTROLLER_AXIS_RIGHTY, -1));
break;
case BTN_CDOWN:
mappings.push_back(
std::make_shared<SDLAxisDirectionToButtonMapping>(portIndex, BTN_CDOWN, SDL_CONTROLLER_AXIS_RIGHTY, 1));
break;
case BTN_CLEFT:
mappings.push_back(std::make_shared<SDLAxisDirectionToButtonMapping>(portIndex, BTN_CLEFT,
SDL_CONTROLLER_AXIS_RIGHTX, -1));
break;
case BTN_CRIGHT:
mappings.push_back(std::make_shared<SDLAxisDirectionToButtonMapping>(portIndex, BTN_CRIGHT,
SDL_CONTROLLER_AXIS_RIGHTX, 1));
break;
case BTN_DUP:
mappings.push_back(
std::make_shared<SDLButtonToButtonMapping>(portIndex, BTN_DUP, SDL_CONTROLLER_BUTTON_DPAD_UP));
break;
case BTN_DDOWN:
mappings.push_back(
std::make_shared<SDLButtonToButtonMapping>(portIndex, BTN_DDOWN, SDL_CONTROLLER_BUTTON_DPAD_DOWN));
break;
case BTN_DLEFT:
mappings.push_back(
std::make_shared<SDLButtonToButtonMapping>(portIndex, BTN_DLEFT, SDL_CONTROLLER_BUTTON_DPAD_LEFT));
break;
case BTN_DRIGHT:
mappings.push_back(
std::make_shared<SDLButtonToButtonMapping>(portIndex, BTN_DRIGHT, SDL_CONTROLLER_BUTTON_DPAD_RIGHT));
break;
auto defaultButtonsForBitmask = Context::GetInstance()
->GetControlDeck()
->GetControllerDefaultMappings()
->GetDefaultSDLButtonToButtonMappings()[bitmask];
for (const auto& sdlGamepadButton : defaultButtonsForBitmask) {
mappings.push_back(std::make_shared<SDLButtonToButtonMapping>(portIndex, bitmask, sdlGamepadButton));
}
auto defaultAxisDirectionsForBitmask = Context::GetInstance()
->GetControlDeck()
->GetControllerDefaultMappings()
->GetDefaultSDLAxisDirectionToButtonMappings()[bitmask];
for (const auto& [sdlGamepadAxis, axisDirection] : defaultAxisDirectionsForBitmask) {
mappings.push_back(
std::make_shared<SDLAxisDirectionToButtonMapping>(portIndex, bitmask, sdlGamepadAxis, axisDirection));
}
return mappings;