mirror of https://github.com/AxioDL/metaforce.git
Fix controller axes + clamping
This commit is contained in:
parent
acd861754c
commit
ed4d38073b
|
@ -48,30 +48,31 @@ void CInputGenerator::controllerAxis(uint32_t which, aurora::ControllerAxis axis
|
||||||
case aurora::ControllerAxis::LeftY:
|
case aurora::ControllerAxis::LeftY:
|
||||||
case aurora::ControllerAxis::RightY:
|
case aurora::ControllerAxis::RightY:
|
||||||
/* Value is inverted compared to what we expect on the Y axis */
|
/* Value is inverted compared to what we expect on the Y axis */
|
||||||
value = -value;
|
value = int16_t(-(value + 1));
|
||||||
[[fallthrough]];
|
[[fallthrough]];
|
||||||
case aurora::ControllerAxis::LeftX:
|
case aurora::ControllerAxis::LeftX:
|
||||||
case aurora::ControllerAxis::RightX:
|
case aurora::ControllerAxis::RightX:
|
||||||
value /= 256;
|
value /= int16_t(256);
|
||||||
if (value < -127)
|
|
||||||
value = -127;
|
|
||||||
else if (value > 127)
|
|
||||||
value = 127;
|
|
||||||
break;
|
break;
|
||||||
case aurora::ControllerAxis::TriggerLeft:
|
case aurora::ControllerAxis::TriggerLeft:
|
||||||
case aurora::ControllerAxis::TriggerRight:
|
case aurora::ControllerAxis::TriggerRight:
|
||||||
printf("Axis before clamp %i", value);
|
value /= int16_t(128);
|
||||||
value /= 128;
|
|
||||||
if (value < 0)
|
|
||||||
value = 0;
|
|
||||||
printf(" after clamp %i\n", value);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
m_state[idx].m_axes[size_t(axis)] = value;
|
m_state[idx].m_axes[size_t(axis)] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const CFinalInput& CInputGenerator::getFinalInput(unsigned int idx, float dt) {
|
||||||
|
auto input = CFinalInput(idx, dt, m_data, m_lastUpdate);
|
||||||
|
// Merge controller input with kb/m input
|
||||||
|
auto state = m_state[idx];
|
||||||
|
state.clamp();
|
||||||
|
input |= CFinalInput(idx, dt, state, m_lastUpdate, m_leftDiv, m_rightDiv);
|
||||||
|
m_lastUpdate = input;
|
||||||
|
return m_lastUpdate;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace metaforce
|
} // namespace metaforce
|
||||||
|
|
|
@ -28,13 +28,7 @@ class CInputGenerator /*: public boo::DeviceFinder*/ {
|
||||||
SAuroraControllerState m_state[4];
|
SAuroraControllerState m_state[4];
|
||||||
|
|
||||||
CFinalInput m_lastUpdate;
|
CFinalInput m_lastUpdate;
|
||||||
const CFinalInput& getFinalInput(unsigned idx, float dt) {
|
const CFinalInput& getFinalInput(unsigned idx, float dt);
|
||||||
auto input = CFinalInput(idx, dt, m_data, m_lastUpdate);
|
|
||||||
// Merge controller input with kb/m input
|
|
||||||
input |= CFinalInput(idx, dt, m_state[idx], m_lastUpdate, m_leftDiv, m_rightDiv);
|
|
||||||
m_lastUpdate = input;
|
|
||||||
return m_lastUpdate;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool m_firstFrame = true;
|
bool m_firstFrame = true;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue