|
1 | 1 | #include "GPLever.h" |
2 | 2 |
|
| 3 | +#include "drivermanager.h" |
| 4 | + |
3 | 5 | void GPLever::draw() { |
4 | 6 | // new style lever: |
5 | 7 | // radius defines the base of the lever |
@@ -72,9 +74,32 @@ void GPLever::draw() { |
72 | 74 | leverX -= leftState ? (!invertX ? leverRadius : -leverRadius) : (!invertX ? -leverRadius : leverRadius); |
73 | 75 | } |
74 | 76 | } else if (leftAnalog || rightAnalog) { |
| 77 | + uint16_t middleX; |
| 78 | + uint16_t middleY; |
| 79 | + if (leftAnalog) { |
| 80 | + middleX = getProcessedGamepad()->state.lx; |
| 81 | + middleY = getProcessedGamepad()->state.ly; |
| 82 | + } else { |
| 83 | + middleX = getProcessedGamepad()->state.rx; |
| 84 | + middleY = getProcessedGamepad()->state.ry; |
| 85 | + } |
| 86 | + |
| 87 | + // Different analogs have different middles |
| 88 | + // Get the midpoint value for the current mode |
| 89 | + uint16_t joystickMid = GAMEPAD_JOYSTICK_MID; |
| 90 | + if ( DriverManager::getInstance().getDriver() != nullptr ) { |
| 91 | + joystickMid = DriverManager::getInstance().getDriver()->GetJoystickMidValue(); |
| 92 | + } |
| 93 | + |
| 94 | + // Accomodate for our offset by 1 for mapping if the driver input uses 0x7FFF instead of 0x8000 |
| 95 | + if ( joystickMid < 0x8000 ) { |
| 96 | + middleX += (0x8000 - joystickMid); |
| 97 | + middleY += (0x8000 - joystickMid); |
| 98 | + } |
| 99 | + |
75 | 100 | // analog |
76 | | - uint16_t analogX = map((leftAnalog ? getProcessedGamepad()->state.lx : getProcessedGamepad()->state.rx), (!invertX ? 0 : 0xFFFF), (!invertX ? 0xFFFF : 0), 0, 100); |
77 | | - uint16_t analogY = map((leftAnalog ? getProcessedGamepad()->state.ly : getProcessedGamepad()->state.ry), (!invertY ? 0 : 0xFFFF), (!invertY ? 0xFFFF : 0), 0, 100); |
| 101 | + uint16_t analogX = map(middleX, (!invertX ? 0 : 0xFFFF), (!invertX ? 0xFFFF : 0), 0, 100); |
| 102 | + uint16_t analogY = map(middleY, (!invertY ? 0 : 0xFFFF), (!invertY ? 0xFFFF : 0), 0, 100); |
78 | 103 |
|
79 | 104 | uint16_t minX = std::max(0,(baseX - baseRadius)); |
80 | 105 | uint16_t maxX = std::min((baseX + baseRadius),128); |
|
0 commit comments