void solvePaddleBallCollision(const Paddle& mPaddle, Ball& mBall) noexcept { if(!isIntersecting(mPaddle, mBall)) return; auto newY(mPaddle.top() - mBall.shape.getRadius() * 2.f); mBall.shape.setPosition(mBall.x(), newY); auto paddleBallDiff(mBall.x() - mPaddle.x()); auto posFactor(paddleBallDiff / mPaddle.width()); auto velFactor(mPaddle.velocity.x * 0.05f); sf::Vector2f collisionVec{posFactor + velFactor, -2.f}; mBall.velocity = getReflected(mBall.velocity, getNormalized(collisionVec)); }
void LevelFactory::createPaddle(Level *level) { Paddle* paddle = new Paddle(180,20); level->addItem(paddle); level->setPaddle(paddle); paddle->setPos(level->width()/2 - paddle->width()/2, level->height()-100); }