void CollisionManager::collision(std::vector<Ball*>& balls, Cursor& cursor) { for (int i = 0; i < balls.size(); i++) { if (balls[i] != 0) { if(cursor.getSprite().getGlobalBounds().intersects(balls[i]->getSprite().getGlobalBounds())) { // Reverse all directions balls[i]->setDirX(-1); balls[i]->setDirY(-1); while(cursor.getSprite().getGlobalBounds().intersects(balls[i]->getSprite().getGlobalBounds())) { // back into the past balls[i]->moveB(); } // No more collision here // Back to the present balls[i]->setDirX(-1); balls[i]->setDirY(-1); // Collision place detection if(balls[i]->getPosY() + balls[i]->getHeight() <= cursor.getPosY()) { // Up balls[i]->setDirY(-1); balls[i]->moveB(); } else if(balls[i]->getPosY() >= cursor.getPosY() + cursor.getWidth() - 5) { // Down balls[i]->setDirY(-1); balls[i]->moveB(); } else if(balls[i]->getPosX() <= cursor.getPosX()) { // Left balls[i]->setDirX(-1); balls[i]->moveB(); } else if(balls[i]->getPosX() >= cursor.getPosX() + cursor.getWidth()) { // Right balls[i]->setDirX(-1); balls[i]->moveB(); } } } } }