Skip to content

Commit 9be3448

Browse files
committed
start to not need index mapping manager
1 parent 7f0f02d commit 9be3448

30 files changed

+501
-966
lines changed

src/controller/controldeck/ControlDeck.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ void ControlDeck::Init(uint8_t* controllerBits) {
3636
mPorts[0]->GetConnectedController()->AddDefaultMappings(PhysicalDeviceType::SDLGamepad);
3737
}
3838

39-
Context::GetInstance()->GetWindow()->GetGui()->GetGuiWindow("Controller Reordering")->Show();
39+
// Context::GetInstance()->GetWindow()->GetGui()->GetGuiWindow("Controller Reordering")->Show();
4040
}
4141

4242
bool ControlDeck::ProcessKeyboardEvent(KbEventType eventType, KbScancode scancode) {

src/controller/controldevice/controller/mapping/ControllerMapping.h

-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ class ControllerMapping {
1616
~ControllerMapping();
1717
virtual std::string GetPhysicalDeviceName();
1818
PhysicalDeviceType GetPhysicalDeviceType();
19-
virtual bool PhysicalDeviceIsConnected() = 0;
2019

2120
protected:
2221
PhysicalDeviceType mPhysicalDeviceType;

src/controller/controldevice/controller/mapping/keyboard/KeyboardKeyToAnyMapping.cpp

-5
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,4 @@ bool KeyboardKeyToAnyMapping::ProcessKeyboardEvent(KbEventType eventType, KbScan
4242
std::string KeyboardKeyToAnyMapping::GetPhysicalDeviceName() {
4343
return "Keyboard";
4444
}
45-
46-
bool KeyboardKeyToAnyMapping::PhysicalDeviceIsConnected() {
47-
// todo: handle non-keyboard devices?
48-
return true;
49-
}
5045
} // namespace Ship

src/controller/controldevice/controller/mapping/keyboard/KeyboardKeyToAnyMapping.h

-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ class KeyboardKeyToAnyMapping : virtual public ControllerInputMapping {
1111
std::string GetPhysicalInputName() override;
1212
bool ProcessKeyboardEvent(KbEventType eventType, KbScancode scancode);
1313
std::string GetPhysicalDeviceName() override;
14-
bool PhysicalDeviceIsConnected() override;
1514

1615
protected:
1716
KbScancode mKeyboardScancode;

src/controller/controldevice/controller/mapping/mouse/MouseButtonToAnyMapping.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,4 @@ bool MouseButtonToAnyMapping::ProcessMouseButtonEvent(bool isPressed, MouseBtn b
2828
std::string MouseButtonToAnyMapping::GetPhysicalDeviceName() {
2929
return "Mouse";
3030
}
31-
32-
bool MouseButtonToAnyMapping::PhysicalDeviceIsConnected() {
33-
return true;
34-
}
3531
} // namespace Ship

src/controller/controldevice/controller/mapping/mouse/MouseButtonToAnyMapping.h

-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ class MouseButtonToAnyMapping : virtual public ControllerInputMapping {
1111
std::string GetPhysicalInputName() override;
1212
bool ProcessMouseButtonEvent(bool isPressed, MouseBtn button);
1313
std::string GetPhysicalDeviceName() override;
14-
bool PhysicalDeviceIsConnected() override;
1514

1615
protected:
1716
MouseBtn mButton;

src/controller/controldevice/controller/mapping/mouse/MouseWheelToAnyMapping.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,4 @@ std::string MouseWheelToAnyMapping::GetPhysicalInputName() {
1919
std::string MouseWheelToAnyMapping::GetPhysicalDeviceName() {
2020
return "Mouse";
2121
}
22-
23-
bool MouseWheelToAnyMapping::PhysicalDeviceIsConnected() {
24-
return true;
25-
}
2622
} // namespace Ship

src/controller/controldevice/controller/mapping/mouse/MouseWheelToAnyMapping.h

-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ class MouseWheelToAnyMapping : virtual public ControllerInputMapping {
1010
~MouseWheelToAnyMapping();
1111
std::string GetPhysicalInputName() override;
1212
std::string GetPhysicalDeviceName() override;
13-
bool PhysicalDeviceIsConnected() override;
1413

1514
protected:
1615
WheelDirection mWheelDirection;

src/controller/controldevice/controller/mapping/sdl/SDLAxisDirectionToAnyMapping.cpp

+6-32
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
namespace Ship {
77
SDLAxisDirectionToAnyMapping::SDLAxisDirectionToAnyMapping(int32_t sdlControllerAxis, int32_t axisDirection)
8-
: ControllerInputMapping(PhysicalDeviceType::SDLGamepad), SDLMapping() {
8+
: ControllerInputMapping(PhysicalDeviceType::SDLGamepad) {
99
mControllerAxis = static_cast<SDL_GameControllerAxis>(sdlControllerAxis);
1010
mAxisDirection = static_cast<AxisDirection>(axisDirection);
1111
}
@@ -16,44 +16,22 @@ SDLAxisDirectionToAnyMapping::~SDLAxisDirectionToAnyMapping() {
1616
std::string SDLAxisDirectionToAnyMapping::GetPhysicalInputName() {
1717
switch (mControllerAxis) {
1818
case SDL_CONTROLLER_AXIS_LEFTX:
19-
return StringHelper::Sprintf(UsesGameCubeLayout() ? "Analog Stick %s" : "Left Stick %s",
19+
return StringHelper::Sprintf("Left Stick %s",
2020
mAxisDirection == NEGATIVE ? ICON_FA_ARROW_LEFT : ICON_FA_ARROW_RIGHT);
2121
case SDL_CONTROLLER_AXIS_LEFTY:
22-
return StringHelper::Sprintf(UsesGameCubeLayout() ? "Analog Stick %s" : "Left Stick %s",
22+
return StringHelper::Sprintf("Left Stick %s",
2323
mAxisDirection == NEGATIVE ? ICON_FA_ARROW_UP : ICON_FA_ARROW_DOWN);
2424
case SDL_CONTROLLER_AXIS_RIGHTX:
25-
return StringHelper::Sprintf(UsesGameCubeLayout() ? "C Stick %s" : "Right Stick %s",
25+
return StringHelper::Sprintf("Right Stick %s",
2626
mAxisDirection == NEGATIVE ? ICON_FA_ARROW_LEFT : ICON_FA_ARROW_RIGHT);
2727
case SDL_CONTROLLER_AXIS_RIGHTY:
28-
return StringHelper::Sprintf(UsesGameCubeLayout() ? "C Stick %s" : "Right Stick %s",
28+
return StringHelper::Sprintf("Right Stick %s",
2929
mAxisDirection == NEGATIVE ? ICON_FA_ARROW_UP : ICON_FA_ARROW_DOWN);
3030
case SDL_CONTROLLER_AXIS_TRIGGERLEFT:
31-
if (UsesPlaystationLayout()) {
32-
return "L2";
33-
}
34-
if (UsesSwitchLayout()) {
35-
return "ZL";
36-
}
37-
if (UsesXboxLayout()) {
3831
return "LT";
39-
}
40-
if (UsesGameCubeLayout()) {
41-
return "L";
42-
}
4332
break;
4433
case SDL_CONTROLLER_AXIS_TRIGGERRIGHT:
45-
if (UsesPlaystationLayout()) {
46-
return "R2";
47-
}
48-
if (UsesSwitchLayout()) {
49-
return "ZR";
50-
}
51-
if (UsesXboxLayout()) {
5234
return "RT";
53-
}
54-
if (UsesGameCubeLayout()) {
55-
return "R";
56-
}
5735
break;
5836
default:
5937
break;
@@ -64,11 +42,7 @@ std::string SDLAxisDirectionToAnyMapping::GetPhysicalInputName() {
6442
}
6543

6644
std::string SDLAxisDirectionToAnyMapping::GetPhysicalDeviceName() {
67-
return GetSDLDeviceName();
68-
}
69-
70-
bool SDLAxisDirectionToAnyMapping::PhysicalDeviceIsConnected() {
71-
return ControllerLoaded();
45+
return "SDL Gamepad";
7246
}
7347

7448
bool SDLAxisDirectionToAnyMapping::AxisIsTrigger() {

src/controller/controldevice/controller/mapping/sdl/SDLAxisDirectionToAnyMapping.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,12 @@
44
#include "controller/controldevice/controller/mapping/ControllerInputMapping.h"
55

66
namespace Ship {
7-
class SDLAxisDirectionToAnyMapping : virtual public ControllerInputMapping, public SDLMapping {
7+
class SDLAxisDirectionToAnyMapping : virtual public ControllerInputMapping {
88
public:
99
SDLAxisDirectionToAnyMapping(int32_t sdlControllerAxis, int32_t axisDirection);
1010
~SDLAxisDirectionToAnyMapping();
1111
std::string GetPhysicalInputName() override;
1212
std::string GetPhysicalDeviceName() override;
13-
bool PhysicalDeviceIsConnected() override;
1413
bool AxisIsTrigger();
1514
bool AxisIsStick();
1615

src/controller/controldevice/controller/mapping/sdl/SDLAxisDirectionToAxisDirectionMapping.cpp

+13-10
Original file line numberDiff line numberDiff line change
@@ -18,23 +18,26 @@ SDLAxisDirectionToAxisDirectionMapping::SDLAxisDirectionToAxisDirectionMapping(u
1818
}
1919

2020
float SDLAxisDirectionToAxisDirectionMapping::GetNormalizedAxisDirectionValue() {
21-
if (!ControllerLoaded()) {
22-
return 0.0f;
23-
}
24-
2521
if (Context::GetInstance()->GetControlDeck()->GamepadGameInputBlocked()) {
2622
return 0.0f;
2723
}
2824

29-
const auto axisValue = SDL_GameControllerGetAxis(mController, mControllerAxis);
25+
// todo: i don't like making a vector here, not sure what a better solution is
26+
std::vector<float> normalizedValues = {};
27+
for (const auto& [instanceId, gamepad] : Context::GetInstance()->GetControlDeck()->GetConnectedPhysicalDeviceManager()->GetConnectedSDLGamepadsForPort(mPortIndex)) {
28+
const auto axisValue = SDL_GameControllerGetAxis(gamepad, mControllerAxis);
3029

31-
if ((mAxisDirection == POSITIVE && axisValue < 0) || (mAxisDirection == NEGATIVE && axisValue > 0)) {
32-
return 0.0f;
30+
if ((mAxisDirection == POSITIVE && axisValue < 0) || (mAxisDirection == NEGATIVE && axisValue > 0)) {
31+
normalizedValues.push_back(0.0f);
32+
continue;
33+
}
34+
35+
// scale {-32768 ... +32767} to {-MAX_AXIS_RANGE ... +MAX_AXIS_RANGE}
36+
// and use the absolute value of it
37+
normalizedValues.push_back(fabs(axisValue * MAX_AXIS_RANGE / MAX_SDL_RANGE));
3338
}
3439

35-
// scale {-32768 ... +32767} to {-MAX_AXIS_RANGE ... +MAX_AXIS_RANGE}
36-
// and return the absolute value of it
37-
return fabs(axisValue * MAX_AXIS_RANGE / MAX_SDL_RANGE);
40+
return *std::max_element(normalizedValues.begin(), normalizedValues.end());
3841
}
3942

4043
std::string SDLAxisDirectionToAxisDirectionMapping::GetAxisDirectionMappingId() {

src/controller/controldevice/controller/mapping/sdl/SDLAxisDirectionToButtonMapping.cpp

+21-21
Original file line numberDiff line numberDiff line change
@@ -14,34 +14,34 @@ SDLAxisDirectionToButtonMapping::SDLAxisDirectionToButtonMapping(uint8_t portInd
1414
}
1515

1616
void SDLAxisDirectionToButtonMapping::UpdatePad(CONTROLLERBUTTONS_T& padButtons) {
17-
if (!ControllerLoaded()) {
18-
return;
19-
}
20-
2117
if (Context::GetInstance()->GetControlDeck()->GamepadGameInputBlocked()) {
2218
return;
2319
}
2420

25-
const auto axisValue = SDL_GameControllerGetAxis(mController, mControllerAxis);
21+
// todo: threshold percentages
2622
int32_t axisThresholdPercentage = 25;
27-
auto indexMapping = Context::GetInstance()
28-
->GetControlDeck()
29-
->GetDeviceIndexMappingManager()
30-
->GetDeviceIndexMappingFromShipDeviceIndex(ControllerInputMapping::mPhysicalDeviceType);
31-
auto sdlIndexMapping = std::dynamic_pointer_cast<ShipDeviceIndexToSDLDeviceIndexMapping>(indexMapping);
23+
// auto indexMapping = Context::GetInstance()
24+
// ->GetControlDeck()
25+
// ->GetDeviceIndexMappingManager()
26+
// ->GetDeviceIndexMappingFromShipDeviceIndex(ControllerInputMapping::mPhysicalDeviceType);
27+
// auto sdlIndexMapping = std::dynamic_pointer_cast<ShipDeviceIndexToSDLDeviceIndexMapping>(indexMapping);
3228

33-
if (sdlIndexMapping != nullptr) {
34-
if (AxisIsStick()) {
35-
axisThresholdPercentage = sdlIndexMapping->GetStickAxisThresholdPercentage();
36-
} else if (AxisIsTrigger()) {
37-
axisThresholdPercentage = sdlIndexMapping->GetTriggerAxisThresholdPercentage();
38-
}
39-
}
29+
// if (sdlIndexMapping != nullptr) {
30+
// if (AxisIsStick()) {
31+
// axisThresholdPercentage = sdlIndexMapping->GetStickAxisThresholdPercentage();
32+
// } else if (AxisIsTrigger()) {
33+
// axisThresholdPercentage = sdlIndexMapping->GetTriggerAxisThresholdPercentage();
34+
// }
35+
// }
36+
37+
for (const auto& [instanceId, gamepad] : Context::GetInstance()->GetControlDeck()->GetConnectedPhysicalDeviceManager()->GetConnectedSDLGamepadsForPort(mPortIndex)) {
38+
const auto axisValue = SDL_GameControllerGetAxis(gamepad, mControllerAxis);
4039

41-
auto axisMinValue = SDL_JOYSTICK_AXIS_MAX * (axisThresholdPercentage / 100.0f);
42-
if ((mAxisDirection == POSITIVE && axisValue > axisMinValue) ||
43-
(mAxisDirection == NEGATIVE && axisValue < -axisMinValue)) {
44-
padButtons |= mBitmask;
40+
auto axisMinValue = SDL_JOYSTICK_AXIS_MAX * (axisThresholdPercentage / 100.0f);
41+
if ((mAxisDirection == POSITIVE && axisValue > axisMinValue) ||
42+
(mAxisDirection == NEGATIVE && axisValue < -axisMinValue)) {
43+
padButtons |= mBitmask;
44+
}
4545
}
4646
}
4747

0 commit comments

Comments
 (0)