mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-21 05:09:34 -06:00
Merge pull request #9157 from jordan-woyak/wm-emu-tilt-wrap-around
WiimoteEmu: Allow tilt to wrap around and simulate full 360 degree rotations.
This commit is contained in:
@ -415,8 +415,18 @@ void TiltIndicator::Draw()
|
||||
{
|
||||
WiimoteEmu::EmulateTilt(&m_motion_state, &m_group, 1.f / INDICATOR_UPDATE_FREQ);
|
||||
|
||||
const auto adj_coord =
|
||||
Common::DVec2{-m_motion_state.angle.y, m_motion_state.angle.x} / MathUtil::PI;
|
||||
auto adj_coord = Common::DVec2{-m_motion_state.angle.y, m_motion_state.angle.x} / MathUtil::PI;
|
||||
|
||||
// Angle values after dividing by pi.
|
||||
constexpr auto norm_180_deg = 1;
|
||||
constexpr auto norm_360_deg = 2;
|
||||
|
||||
// Angle may extend beyond 180 degrees when wrapping around.
|
||||
// Apply modulo to draw within the indicator.
|
||||
// Scale down the value a bit so +1 does not become -1.
|
||||
adj_coord *= 0.9999f;
|
||||
adj_coord.x = std::fmod(adj_coord.x + norm_360_deg + norm_180_deg, norm_360_deg) - norm_180_deg;
|
||||
adj_coord.y = std::fmod(adj_coord.y + norm_360_deg + norm_180_deg, norm_360_deg) - norm_180_deg;
|
||||
|
||||
DrawReshapableInput(m_group, TILT_GATE_COLOR,
|
||||
(adj_coord.x || adj_coord.y) ? std::make_optional(adj_coord) : std::nullopt);
|
||||
|
Reference in New Issue
Block a user