Skip to content

Commit 4ab8c42

Browse files
committed
axis direction to axis direction
1 parent f281c04 commit 4ab8c42

File tree

3 files changed

+57
-11
lines changed

3 files changed

+57
-11
lines changed

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

+36-2
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,17 @@ ControllerDefaultMappings::ControllerDefaultMappings(
1111
std::unordered_map<StickIndex, std::vector<std::pair<Direction, SDL_GameControllerButton>>>
1212
defaultSDLButtonToAxisDirectionMappings,
1313
std::unordered_map<CONTROLLERBUTTONS_T, std::vector<std::pair<SDL_GameControllerAxis, int32_t>>>
14-
defaultSDLAxisDirectionToButtonMappings) {
14+
defaultSDLAxisDirectionToButtonMappings,
15+
std::unordered_map<StickIndex, std::vector<std::pair<Direction, std::pair<SDL_GameControllerAxis, int32_t>>>>
16+
defaultSDLAxisDirectionToAxisDirectionMappings) {
1517
SetDefaultKeyboardKeyToButtonMappings(defaultKeyboardKeyToButtonMappings);
1618
SetDefaultKeyboardKeyToAxisDirectionMappings(defaultKeyboardKeyToAxisDirectionMappings);
1719

1820
SetDefaultSDLButtonToButtonMappings(defaultSDLButtonToButtonMappings);
1921
SetDefaultSDLButtonToAxisDirectionMappings(defaultSDLButtonToAxisDirectionMappings);
2022

2123
SetDefaultSDLAxisDirectionToButtonMappings(defaultSDLAxisDirectionToButtonMappings);
24+
SetDefaultSDLAxisDirectionToAxisDirectionMappings(defaultSDLAxisDirectionToAxisDirectionMappings);
2225
}
2326

2427
ControllerDefaultMappings::ControllerDefaultMappings()
@@ -27,7 +30,9 @@ ControllerDefaultMappings::ControllerDefaultMappings()
2730
std::unordered_map<StickIndex, std::vector<std::pair<Direction, KbScancode>>>(),
2831
std::unordered_map<CONTROLLERBUTTONS_T, std::unordered_set<SDL_GameControllerButton>>(),
2932
std::unordered_map<StickIndex, std::vector<std::pair<Direction, SDL_GameControllerButton>>>(),
30-
std::unordered_map<CONTROLLERBUTTONS_T, std::vector<std::pair<SDL_GameControllerAxis, int32_t>>>()) {
33+
std::unordered_map<CONTROLLERBUTTONS_T, std::vector<std::pair<SDL_GameControllerAxis, int32_t>>>(),
34+
std::unordered_map<StickIndex,
35+
std::vector<std::pair<Direction, std::pair<SDL_GameControllerAxis, int32_t>>>>()) {
3136
}
3237

3338
ControllerDefaultMappings::~ControllerDefaultMappings() {
@@ -137,4 +142,33 @@ void ControllerDefaultMappings::SetDefaultSDLAxisDirectionToButtonMappings(
137142
mDefaultSDLAxisDirectionToButtonMappings[BTN_CLEFT] = { { SDL_CONTROLLER_AXIS_RIGHTX, -1 } };
138143
mDefaultSDLAxisDirectionToButtonMappings[BTN_CRIGHT] = { { SDL_CONTROLLER_AXIS_RIGHTX, 1 } };
139144
}
145+
146+
std::unordered_map<StickIndex, std::vector<std::pair<Direction, std::pair<SDL_GameControllerAxis, int32_t>>>>
147+
ControllerDefaultMappings::GetDefaultSDLAxisDirectionToAxisDirectionMappings() {
148+
return mDefaultSDLAxisDirectionToAxisDirectionMappings;
149+
}
150+
151+
void ControllerDefaultMappings::SetDefaultSDLAxisDirectionToAxisDirectionMappings(
152+
std::unordered_map<StickIndex, std::vector<std::pair<Direction, std::pair<SDL_GameControllerAxis, int32_t>>>>
153+
defaultSDLAxisDirectionToAxisDirectionMappings) {
154+
if (!defaultSDLAxisDirectionToAxisDirectionMappings.empty()) {
155+
mDefaultSDLAxisDirectionToAxisDirectionMappings = defaultSDLAxisDirectionToAxisDirectionMappings;
156+
return;
157+
}
158+
159+
mDefaultSDLAxisDirectionToAxisDirectionMappings[LEFT_STICK] = {
160+
{ LEFT, { SDL_CONTROLLER_AXIS_LEFTX, -1 } },
161+
{ RIGHT, { SDL_CONTROLLER_AXIS_LEFTX, 1 } },
162+
{ UP, { SDL_CONTROLLER_AXIS_LEFTY, -1 } },
163+
{ DOWN, { SDL_CONTROLLER_AXIS_LEFTY, 1 } },
164+
};
165+
166+
mDefaultSDLAxisDirectionToAxisDirectionMappings[RIGHT_STICK] = {
167+
{ LEFT, { SDL_CONTROLLER_AXIS_RIGHTX, -1 } },
168+
{ RIGHT, { SDL_CONTROLLER_AXIS_RIGHTX, 1 } },
169+
{ UP, { SDL_CONTROLLER_AXIS_RIGHTY, -1 } },
170+
{ DOWN, { SDL_CONTROLLER_AXIS_RIGHTY, 1 } },
171+
};
172+
}
173+
140174
} // namespace Ship

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

+11-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ class ControllerDefaultMappings {
2626
std::unordered_map<StickIndex, std::vector<std::pair<Direction, SDL_GameControllerButton>>>
2727
defaultSDLButtonToAxisDirectionMappings,
2828
std::unordered_map<CONTROLLERBUTTONS_T, std::vector<std::pair<SDL_GameControllerAxis, int32_t>>>
29-
defaultSDLAxisDirectionToButtonMappings);
29+
defaultSDLAxisDirectionToButtonMappings,
30+
std::unordered_map<StickIndex, std::vector<std::pair<Direction, std::pair<SDL_GameControllerAxis, int32_t>>>>
31+
defaultSDLAxisDirectionToAxisDirectionMappings);
3032
ControllerDefaultMappings();
3133
~ControllerDefaultMappings();
3234

@@ -41,6 +43,8 @@ class ControllerDefaultMappings {
4143

4244
std::unordered_map<CONTROLLERBUTTONS_T, std::vector<std::pair<SDL_GameControllerAxis, int32_t>>>
4345
GetDefaultSDLAxisDirectionToButtonMappings();
46+
std::unordered_map<StickIndex, std::vector<std::pair<Direction, std::pair<SDL_GameControllerAxis, int32_t>>>>
47+
GetDefaultSDLAxisDirectionToAxisDirectionMappings();
4448

4549
private:
4650
void SetDefaultKeyboardKeyToButtonMappings(
@@ -70,5 +74,11 @@ class ControllerDefaultMappings {
7074
defaultSDLAxisDirectionToButtonMappings);
7175
std::unordered_map<CONTROLLERBUTTONS_T, std::vector<std::pair<SDL_GameControllerAxis, int32_t>>>
7276
mDefaultSDLAxisDirectionToButtonMappings;
77+
78+
void SetDefaultSDLAxisDirectionToAxisDirectionMappings(
79+
std::unordered_map<StickIndex, std::vector<std::pair<Direction, std::pair<SDL_GameControllerAxis, int32_t>>>>
80+
defaultSDLAxisDirectionToAxisDirectionMappings);
81+
std::unordered_map<StickIndex, std::vector<std::pair<Direction, std::pair<SDL_GameControllerAxis, int32_t>>>>
82+
mDefaultSDLAxisDirectionToAxisDirectionMappings;
7383
};
7484
} // namespace Ship

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

+10-8
Original file line numberDiff line numberDiff line change
@@ -138,14 +138,16 @@ AxisDirectionMappingFactory::CreateDefaultSDLAxisDirectionMappings(uint8_t portI
138138
std::make_shared<SDLButtonToAxisDirectionMapping>(portIndex, stickIndex, direction, sdlGamepadButton));
139139
}
140140

141-
mappings.push_back(std::make_shared<SDLAxisDirectionToAxisDirectionMapping>(portIndex, stickIndex, LEFT,
142-
stickIndex == LEFT_STICK ? 0 : 2, -1));
143-
mappings.push_back(std::make_shared<SDLAxisDirectionToAxisDirectionMapping>(portIndex, stickIndex, RIGHT,
144-
stickIndex == LEFT_STICK ? 0 : 2, 1));
145-
mappings.push_back(std::make_shared<SDLAxisDirectionToAxisDirectionMapping>(portIndex, stickIndex, UP,
146-
stickIndex == LEFT_STICK ? 1 : 3, -1));
147-
mappings.push_back(std::make_shared<SDLAxisDirectionToAxisDirectionMapping>(portIndex, stickIndex, DOWN,
148-
stickIndex == LEFT_STICK ? 1 : 3, 1));
141+
auto defaultAxisDirectionsForStick = Context::GetInstance()
142+
->GetControlDeck()
143+
->GetControllerDefaultMappings()
144+
->GetDefaultSDLAxisDirectionToAxisDirectionMappings()[stickIndex];
145+
146+
for (const auto& [direction, sdlGamepadAxisDirection] : defaultAxisDirectionsForStick) {
147+
auto [sdlGamepadAxis, sdlGamepadDirection] = sdlGamepadAxisDirection;
148+
mappings.push_back(std::make_shared<SDLAxisDirectionToAxisDirectionMapping>(
149+
portIndex, stickIndex, direction, sdlGamepadAxis, sdlGamepadDirection));
150+
}
149151

150152
return mappings;
151153
}

0 commit comments

Comments
 (0)