diff --git a/src/ball.cpp b/src/ball.cpp index f95b2bf..059808b 100644 --- a/src/ball.cpp +++ b/src/ball.cpp @@ -20,39 +20,6 @@ sf::Vector2f Ball::getForces(EngineState& state) { forces += sf::Vector2f(Constants::MOVE, 0); } - // force d'attraction entre les balles et les blocs chargés - if (getCharge() != 0) { - for (unsigned int j = 0; j < state.objects.size(); j++) { - Object *attractive = state.objects[j]; - - if (attractive == this || attractive->getCharge() == 0) { - continue; - } - - // vecteur allant de l'objet attirant vers l'objet considéré - sf::Vector2f attraction(getPosition() - attractive->getPosition()); - - // la norme de ce vecteur est la distance entre les objets - float distanceSquared = attraction.x * attraction.x + - attraction.y * attraction.y; - - // éviter la division par zéro - if (distanceSquared == 0) { - continue; - } - - // normalisation du vecteur direction qui porte - // la force d'attraction, puis application de la norme - attraction /= std::sqrt(distanceSquared); - attraction *= Constants::ATTRACTION * ( - (getCharge() * attractive->getCharge()) / - distanceSquared - ); - - forces += attraction; - } - } - return forces; } diff --git a/src/object.cpp b/src/object.cpp index 8c03ef8..8231a00 100644 --- a/src/object.cpp +++ b/src/object.cpp @@ -17,6 +17,39 @@ sf::Vector2f Object::getForces(EngineState& state) { // force de gravité forces += sf::Vector2f(0, Constants::GRAVITY); + // force d'attraction entre objets chargés + if (getCharge() != 0) { + for (unsigned int j = 0; j < state.objects.size(); j++) { + Object *attractive = state.objects[j]; + + if (attractive == this || attractive->getCharge() == 0) { + continue; + } + + // vecteur allant de l'objet attracteur vers l'objet actuel + sf::Vector2f attraction(getPosition() - attractive->getPosition()); + + // la norme de ce vecteur est la distance entre les objets + float distanceSquared = attraction.x * attraction.x + + attraction.y * attraction.y; + + // éviter la division par zéro + if (distanceSquared == 0) { + continue; + } + + // normalisation du vecteur direction qui porte + // la force d'attraction, puis application de la norme + attraction /= std::sqrt(distanceSquared); + attraction *= Constants::ATTRACTION * ( + (getCharge() * attractive->getCharge()) / + distanceSquared + ); + + forces += attraction; + } + } + return forces; }