Skip to content

Commit 0516cc2

Browse files
committed
axis direction to button mapping
1 parent 6755778 commit 0516cc2

File tree

3 files changed

+50
-31
lines changed

3 files changed

+50
-31
lines changed

src/controller/controldevice/controller/mapping/ControllerDefaultMappings.cpp

+27-2
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,19 @@ namespace Ship {
55
ControllerDefaultMappings::ControllerDefaultMappings(
66
std::unordered_map<CONTROLLERBUTTONS_T, std::unordered_set<KbScancode>> defaultKeyboardKeyToButtonMappings,
77
std::unordered_map<CONTROLLERBUTTONS_T, std::unordered_set<SDL_GameControllerButton>>
8-
defaultSDLButtonToButtonMappings) {
8+
defaultSDLButtonToButtonMappings,
9+
std::unordered_map<CONTROLLERBUTTONS_T, std::vector<std::pair<SDL_GameControllerAxis, int32_t>>>
10+
defaultSDLAxisDirectionToButtonMappings) {
911
SetDefaultKeyboardKeyToButtonMappings(defaultKeyboardKeyToButtonMappings);
1012
SetDefaultSDLButtonToButtonMappings(defaultSDLButtonToButtonMappings);
13+
SetDefaultSDLAxisDirectionToButtonMappings(defaultSDLAxisDirectionToButtonMappings);
1114
}
1215

1316
ControllerDefaultMappings::ControllerDefaultMappings()
1417
: ControllerDefaultMappings(
1518
std::unordered_map<CONTROLLERBUTTONS_T, std::unordered_set<KbScancode>>(),
16-
std::unordered_map<CONTROLLERBUTTONS_T, std::unordered_set<SDL_GameControllerButton>>()) {
19+
std::unordered_map<CONTROLLERBUTTONS_T, std::unordered_set<SDL_GameControllerButton>>(),
20+
std::unordered_map<CONTROLLERBUTTONS_T, std::vector<std::pair<SDL_GameControllerAxis, int32_t>>>()) {
1721
}
1822

1923
ControllerDefaultMappings::~ControllerDefaultMappings() {
@@ -69,4 +73,25 @@ void ControllerDefaultMappings::SetDefaultSDLButtonToButtonMappings(
6973
mDefaultSDLButtonToButtonMappings[BTN_DLEFT] = { SDL_CONTROLLER_BUTTON_DPAD_LEFT };
7074
mDefaultSDLButtonToButtonMappings[BTN_DRIGHT] = { SDL_CONTROLLER_BUTTON_DPAD_RIGHT };
7175
}
76+
77+
std::unordered_map<CONTROLLERBUTTONS_T, std::vector<std::pair<SDL_GameControllerAxis, int32_t>>>
78+
ControllerDefaultMappings::GetDefaultSDLAxisDirectionToButtonMappings() {
79+
return mDefaultSDLAxisDirectionToButtonMappings;
80+
}
81+
82+
void ControllerDefaultMappings::SetDefaultSDLAxisDirectionToButtonMappings(
83+
std::unordered_map<CONTROLLERBUTTONS_T, std::vector<std::pair<SDL_GameControllerAxis, int32_t>>>
84+
defaultSDLAxisDirectionToButtonMappings) {
85+
if (!defaultSDLAxisDirectionToButtonMappings.empty()) {
86+
mDefaultSDLAxisDirectionToButtonMappings = defaultSDLAxisDirectionToButtonMappings;
87+
return;
88+
}
89+
90+
mDefaultSDLAxisDirectionToButtonMappings[BTN_R] = { { SDL_CONTROLLER_AXIS_TRIGGERRIGHT, 1 } };
91+
mDefaultSDLAxisDirectionToButtonMappings[BTN_Z] = { { SDL_CONTROLLER_AXIS_TRIGGERLEFT, 1 } };
92+
mDefaultSDLAxisDirectionToButtonMappings[BTN_CUP] = { { SDL_CONTROLLER_AXIS_RIGHTY, -1 } };
93+
mDefaultSDLAxisDirectionToButtonMappings[BTN_CDOWN] = { { SDL_CONTROLLER_AXIS_RIGHTY, 1 } };
94+
mDefaultSDLAxisDirectionToButtonMappings[BTN_CLEFT] = { { SDL_CONTROLLER_AXIS_RIGHTX, -1 } };
95+
mDefaultSDLAxisDirectionToButtonMappings[BTN_CRIGHT] = { { SDL_CONTROLLER_AXIS_RIGHTX, 1 } };
96+
}
7297
} // namespace Ship

src/controller/controldevice/controller/mapping/ControllerDefaultMappings.h

+12-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <cstdint>
44
#include <unordered_map>
55
#include <unordered_set>
6+
#include <vector>
67
#include <SDL2/SDL.h>
78

89
#ifndef CONTROLLERBUTTONS_T
@@ -18,13 +19,17 @@ class ControllerDefaultMappings {
1819
ControllerDefaultMappings(
1920
std::unordered_map<CONTROLLERBUTTONS_T, std::unordered_set<KbScancode>> defaultKeyboardKeyToButtonMappings,
2021
std::unordered_map<CONTROLLERBUTTONS_T, std::unordered_set<SDL_GameControllerButton>>
21-
defaultSDLButtonToButtonMappings);
22+
defaultSDLButtonToButtonMappings,
23+
std::unordered_map<CONTROLLERBUTTONS_T, std::vector<std::pair<SDL_GameControllerAxis, int32_t>>>
24+
defaultSDLAxisDirectionToButtonMappings);
2225
ControllerDefaultMappings();
2326
~ControllerDefaultMappings();
2427

2528
std::unordered_map<CONTROLLERBUTTONS_T, std::unordered_set<KbScancode>> GetDefaultKeyboardKeyToButtonMappings();
2629
std::unordered_map<CONTROLLERBUTTONS_T, std::unordered_set<SDL_GameControllerButton>>
2730
GetDefaultSDLButtonToButtonMappings();
31+
std::unordered_map<CONTROLLERBUTTONS_T, std::vector<std::pair<SDL_GameControllerAxis, int32_t>>>
32+
GetDefaultSDLAxisDirectionToButtonMappings();
2833

2934
private:
3035
void SetDefaultKeyboardKeyToButtonMappings(
@@ -36,5 +41,11 @@ class ControllerDefaultMappings {
3641
defaultSDLButtonToButtonMappings);
3742
std::unordered_map<CONTROLLERBUTTONS_T, std::unordered_set<SDL_GameControllerButton>>
3843
mDefaultSDLButtonToButtonMappings;
44+
45+
void SetDefaultSDLAxisDirectionToButtonMappings(
46+
std::unordered_map<CONTROLLERBUTTONS_T, std::vector<std::pair<SDL_GameControllerAxis, int32_t>>>
47+
defaultSDLAxisDirectionToButtonMappings);
48+
std::unordered_map<CONTROLLERBUTTONS_T, std::vector<std::pair<SDL_GameControllerAxis, int32_t>>>
49+
mDefaultSDLAxisDirectionToButtonMappings;
3950
};
4051
} // namespace Ship

src/controller/controldevice/controller/mapping/factories/ButtonMappingFactory.cpp

+11-28
Original file line numberDiff line numberDiff line change
@@ -101,39 +101,22 @@ ButtonMappingFactory::CreateDefaultSDLButtonMappings(uint8_t portIndex, CONTROLL
101101
std::vector<std::shared_ptr<ControllerButtonMapping>> mappings;
102102

103103
auto defaultButtonsForBitmask = Context::GetInstance()
104-
->GetControlDeck()
105-
->GetControllerDefaultMappings()
106-
->GetDefaultSDLButtonToButtonMappings()[bitmask];
104+
->GetControlDeck()
105+
->GetControllerDefaultMappings()
106+
->GetDefaultSDLButtonToButtonMappings()[bitmask];
107107

108108
for (const auto& sdlGamepadButton : defaultButtonsForBitmask) {
109109
mappings.push_back(std::make_shared<SDLButtonToButtonMapping>(portIndex, bitmask, sdlGamepadButton));
110110
}
111111

112-
switch (bitmask) {
113-
case BTN_R:
114-
mappings.push_back(std::make_shared<SDLAxisDirectionToButtonMapping>(portIndex, BTN_R,
115-
SDL_CONTROLLER_AXIS_TRIGGERRIGHT, 1));
116-
break;
117-
case BTN_Z:
118-
mappings.push_back(std::make_shared<SDLAxisDirectionToButtonMapping>(portIndex, BTN_Z,
119-
SDL_CONTROLLER_AXIS_TRIGGERLEFT, 1));
120-
break;
121-
case BTN_CUP:
122-
mappings.push_back(
123-
std::make_shared<SDLAxisDirectionToButtonMapping>(portIndex, BTN_CUP, SDL_CONTROLLER_AXIS_RIGHTY, -1));
124-
break;
125-
case BTN_CDOWN:
126-
mappings.push_back(
127-
std::make_shared<SDLAxisDirectionToButtonMapping>(portIndex, BTN_CDOWN, SDL_CONTROLLER_AXIS_RIGHTY, 1));
128-
break;
129-
case BTN_CLEFT:
130-
mappings.push_back(std::make_shared<SDLAxisDirectionToButtonMapping>(portIndex, BTN_CLEFT,
131-
SDL_CONTROLLER_AXIS_RIGHTX, -1));
132-
break;
133-
case BTN_CRIGHT:
134-
mappings.push_back(std::make_shared<SDLAxisDirectionToButtonMapping>(portIndex, BTN_CRIGHT,
135-
SDL_CONTROLLER_AXIS_RIGHTX, 1));
136-
break;
112+
auto defaultAxisDirectionsForBitmask = Context::GetInstance()
113+
->GetControlDeck()
114+
->GetControllerDefaultMappings()
115+
->GetDefaultSDLAxisDirectionToButtonMappings()[bitmask];
116+
117+
for (const auto& [sdlGamepadAxis, axisDirection] : defaultAxisDirectionsForBitmask) {
118+
mappings.push_back(
119+
std::make_shared<SDLAxisDirectionToButtonMapping>(portIndex, bitmask, sdlGamepadAxis, axisDirection));
137120
}
138121

139122
return mappings;

0 commit comments

Comments
 (0)