71 auto paddleRect = paddle->
getRect();
72 paddleRect.origin.x += paddle->getPosition().x;
73 paddleRect.origin.y += paddle->getPosition().y;
75 float lowY = paddleRect.getMinY();
76 float midY = paddleRect.getMidY();
77 float highY = paddleRect.getMaxY();
79 float leftX = paddleRect.getMinX();
80 float rightX = paddleRect.getMaxX();
82 if (getPosition().x > leftX && getPosition().x < rightX) {
85 float angleOffset = 0.0f;
87 if (getPosition().y > midY && getPosition().y <= highY +
radius())
89 setPosition(getPosition().x, highY +
radius());
91 angleOffset = (float)M_PI / 2;
93 else if (getPosition().y < midY && getPosition().y >= lowY -
radius())
95 setPosition(getPosition().x, lowY -
radius());
97 angleOffset = -(float)M_PI / 2;
102 float hitAngle = (paddle->getPosition() - getPosition()).getAngle() + angleOffset;
104 float scalarVelocity =
_velocity.getLength() * 1.05f;
105 float velocityAngle = -
_velocity.getAngle() + 0.5f * hitAngle;
107 _velocity = Vec2::forAngle(velocityAngle) * scalarVelocity;