mirror of https://github.com/AxioDL/metaforce.git
Fix input not working properly
This commit is contained in:
parent
e3c8fa1d8f
commit
9804543327
|
@ -10,13 +10,13 @@ enum class EJoyAxis {
|
|||
};
|
||||
|
||||
class CControllerAxis {
|
||||
float x0_absolute = 0.f;
|
||||
float x4_relative = 0.f;
|
||||
float x0_relative = 0.f;
|
||||
float x4_absolute = 0.f;
|
||||
|
||||
public:
|
||||
void SetRelativeValue(float val) { x0_absolute = val; }
|
||||
float GetRelativeValue() const { return x0_absolute; }
|
||||
void SetAbsoluteValue(float val) { x4_relative = val; }
|
||||
float GetAbsoluteValue() const { return x4_relative; }
|
||||
void SetRelativeValue(float val) { x0_relative = val; }
|
||||
float GetRelativeValue() const { return x0_relative; }
|
||||
void SetAbsoluteValue(float val) { x4_absolute = val; }
|
||||
float GetAbsoluteValue() const { return x4_absolute; }
|
||||
};
|
||||
} // namespace metaforce
|
|
@ -103,21 +103,8 @@ void CDolphinController::ProcessAxis(u32 controller, EJoyAxis axis) {
|
|||
axisValue = x4_status[controller].x5_substickY;
|
||||
}
|
||||
axisValue *= 1.f / maxAxisValue;
|
||||
float absolute = kAbsoluteMinimum;
|
||||
if (axisValue < kAbsoluteMinimum) {
|
||||
absolute = kAbsoluteMinimum;
|
||||
} else if (axisValue > kAbsoluteMaximum) {
|
||||
absolute = kAbsoluteMaximum;
|
||||
}
|
||||
|
||||
axisValue = absolute - data.GetAbsoluteValue();
|
||||
float relativeValue = kRelativeMinimum;
|
||||
if (axisValue < kRelativeMinimum) {
|
||||
relativeValue = kRelativeMinimum;
|
||||
} else if (axisValue > kRelativeMaximum) {
|
||||
relativeValue = kRelativeMaximum;
|
||||
}
|
||||
|
||||
float absolute = zeus::clamp(kAbsoluteMinimum, axisValue, kAbsoluteMaximum);
|
||||
float relativeValue = zeus::clamp(kRelativeMinimum, absolute - data.GetAbsoluteValue(), kRelativeMaximum);
|
||||
data.SetAbsoluteValue(absolute);
|
||||
data.SetRelativeValue(relativeValue);
|
||||
}
|
||||
|
@ -141,7 +128,7 @@ void CDolphinController::ProcessDigitalButton(u32 controller, CControllerButton&
|
|||
bool btnPressed = (x4_status[controller].x0_buttons & mapping) != 0;
|
||||
button.SetPressEvent(PADButtonDown(button.GetIsPressed(), btnPressed));
|
||||
button.SetReleaseEvent(PADButtonUp(button.GetIsPressed(), btnPressed));
|
||||
button.SetPressEvent(btnPressed);
|
||||
button.SetIsPressed(btnPressed);
|
||||
}
|
||||
void CDolphinController::ProcessAnalogButton(float value, CControllerAxis& axis) {
|
||||
float absolute = value * (1 / 150.f);
|
||||
|
|
|
@ -380,16 +380,34 @@ u32 PADRead(PAD::Status* status) {
|
|||
|
||||
Sint16 x = SDL_GameControllerGetAxis(controller.m_controller, SDL_CONTROLLER_AXIS_LEFTX);
|
||||
Sint16 y = SDL_GameControllerGetAxis(controller.m_controller, SDL_CONTROLLER_AXIS_LEFTY);
|
||||
if (std::abs(x) > 8000) {
|
||||
x /= 256;
|
||||
} else {
|
||||
x = 0;
|
||||
}
|
||||
|
||||
if (std::abs(y) > 8000) {
|
||||
y = (-(y + 1u)) / 256u;
|
||||
} else {
|
||||
y = 0;
|
||||
}
|
||||
|
||||
status[i].x2_stickX = static_cast<s8>(x);
|
||||
status[i].x3_stickY = static_cast<s8>(y);
|
||||
|
||||
x = SDL_GameControllerGetAxis(controller.m_controller, SDL_CONTROLLER_AXIS_RIGHTX);
|
||||
y = SDL_GameControllerGetAxis(controller.m_controller, SDL_CONTROLLER_AXIS_RIGHTY);
|
||||
if (std::abs(x) > 8000) {
|
||||
x /= 256;
|
||||
} else {
|
||||
x = 0;
|
||||
}
|
||||
|
||||
if (std::abs(y) > 8000) {
|
||||
y = (-(y + 1u)) / 256u;
|
||||
} else {
|
||||
y = 0;
|
||||
}
|
||||
|
||||
status[i].x4_substickX = static_cast<s8>(x);
|
||||
status[i].x5_substickY = static_cast<s8>(y);
|
||||
|
|
Loading…
Reference in New Issue