DolphinQt: Eliminiate redundant swing indicator logic.

This commit is contained in:
Jordan Woyak 2020-02-24 15:40:37 -06:00
parent d80fd13b17
commit 122984b46e
2 changed files with 16 additions and 62 deletions

View File

@ -287,6 +287,8 @@ void ReshapableInputIndicator::DrawReshapableInput(
return; return;
} }
DrawUnderGate(p);
QColor gate_pen_color = gate_brush_color.darker(125); QColor gate_pen_color = gate_brush_color.darker(125);
AdjustGateColor(&gate_brush_color); AdjustGateColor(&gate_brush_color);
@ -450,37 +452,10 @@ void MixedTriggersIndicator::Draw()
} }
} }
void SwingIndicator::Draw() void SwingIndicator::DrawUnderGate(QPainter& p)
{ {
auto& force = m_swing_group; auto& force = m_swing_group;
const auto center = force.GetCenter();
QColor gate_brush_color = SWING_GATE_COLOR;
QColor gate_pen_color = gate_brush_color.darker(125);
AdjustGateColor(&gate_brush_color);
AdjustGateColor(&gate_pen_color);
const auto raw_coord = force.GetState(false);
WiimoteEmu::EmulateSwing(&m_motion_state, &force, 1.f / INDICATOR_UPDATE_FREQ);
const auto& adj_coord = m_motion_state.position;
UpdateCalibrationWidget({raw_coord.x, raw_coord.y});
QPainter p(this);
DrawBoundingBox(p);
TransformPainter(p);
// UI y-axis is opposite that of stick.
p.scale(1.0, -1.0);
if (IsCalibrating())
{
DrawCalibration(p, {raw_coord.x, raw_coord.y});
return;
}
// Deadzone for Z (forward/backward): // Deadzone for Z (forward/backward):
const double deadzone = force.GetDeadzonePercentage(); const double deadzone = force.GetDeadzonePercentage();
if (deadzone > 0.0) if (deadzone > 0.0)
@ -491,10 +466,12 @@ void SwingIndicator::Draw()
} }
// Raw Z: // Raw Z:
const auto raw_coord = force.GetState(false);
p.setPen(GetCosmeticPen(QPen(GetRawInputColor(), INPUT_DOT_RADIUS))); p.setPen(GetCosmeticPen(QPen(GetRawInputColor(), INPUT_DOT_RADIUS)));
p.drawLine(QLineF(-1, raw_coord.z, 1, raw_coord.z)); p.drawLine(QLineF(-1, raw_coord.z, 1, raw_coord.z));
// Adjusted Z: // Adjusted Z:
const auto& adj_coord = m_motion_state.position;
const auto curve_point = const auto curve_point =
std::max(std::abs(m_motion_state.angle.x), std::abs(m_motion_state.angle.z)) / MathUtil::TAU; std::max(std::abs(m_motion_state.angle.x), std::abs(m_motion_state.angle.z)) / MathUtil::TAU;
if (adj_coord.y || curve_point) if (adj_coord.y || curve_point)
@ -508,42 +485,15 @@ void SwingIndicator::Draw()
p.setPen(GetCosmeticPen(QPen(GetAdjustedInputColor(), INPUT_DOT_RADIUS))); p.setPen(GetCosmeticPen(QPen(GetAdjustedInputColor(), INPUT_DOT_RADIUS)));
p.drawPath(path); p.drawPath(path);
} }
}
// Draw "gate" shape. void SwingIndicator::Draw()
p.setPen(QPen(gate_pen_color, 0)); {
p.setBrush(gate_brush_color); auto& force = m_swing_group;
p.drawPolygon( WiimoteEmu::EmulateSwing(&m_motion_state, &force, 1.f / INDICATOR_UPDATE_FREQ);
GetPolygonFromRadiusGetter([&force](double ang) { return force.GetGateRadiusAtAngle(ang); }));
// Deadzone. DrawReshapableInput(force, SWING_GATE_COLOR,
p.setPen(GetDeadZonePen()); Common::DVec2{-m_motion_state.position.x, m_motion_state.position.z});
p.setBrush(GetDeadZoneBrush(p));
p.drawPolygon(GetPolygonFromRadiusGetter(
[&force](double ang) { return force.GetDeadzoneRadiusAtAngle(ang); }, center));
// Input shape.
p.setPen(GetInputShapePen());
p.setBrush(Qt::NoBrush);
p.drawPolygon(GetPolygonFromRadiusGetter(
[&force](double ang) { return force.GetInputRadiusAtAngle(ang); }, center));
// Center.
if (center.x || center.y)
{
p.setPen(GetInputDotPen(GetCenterColor()));
p.drawPoint(QPointF{center.x, center.y});
}
// Raw stick position.
p.setPen(GetInputDotPen(GetRawInputColor()));
p.drawPoint(QPointF{raw_coord.x, raw_coord.y});
// Adjusted position:
if (adj_coord.x || adj_coord.z)
{
p.setPen(GetInputDotPen(GetAdjustedInputColor()));
p.drawPoint(QPointF{-adj_coord.x, adj_coord.z});
}
} }
void ShakeMappingIndicator::Draw() void ShakeMappingIndicator::Draw()

View File

@ -69,6 +69,8 @@ protected:
void DrawReshapableInput(ControllerEmu::ReshapableInput& group, QColor gate_color, void DrawReshapableInput(ControllerEmu::ReshapableInput& group, QColor gate_color,
std::optional<ControllerEmu::ReshapableInput::ReshapeData> adj_coord); std::optional<ControllerEmu::ReshapableInput::ReshapeData> adj_coord);
virtual void DrawUnderGate(QPainter&) {}
bool IsCalibrating() const; bool IsCalibrating() const;
void DrawCalibration(QPainter& p, Common::DVec2 point); void DrawCalibration(QPainter& p, Common::DVec2 point);
@ -131,6 +133,8 @@ public:
private: private:
void Draw() override; void Draw() override;
void DrawUnderGate(QPainter& p) override;
ControllerEmu::Force& m_swing_group; ControllerEmu::Force& m_swing_group;
WiimoteEmu::MotionState m_motion_state{}; WiimoteEmu::MotionState m_motion_state{};
}; };