skizzle/ball.cpp

56 lines
1.6 KiB
C++

#include "ball.hpp"
Ball::Ball() {
// TODO: implémenter cette fonction
}
void Ball::draw(sf::RenderWindow& window) {
// TODO: implémenter cette fonction
}
sf::Vector2f Ball::getForces(State state) {
sf::Vector2f forces = PhysicsObject::getForces(state);
// déplacement de la balle après appui sur les touches de direction
if (state.goLeftKey) {
forces += sf::Vector2f(-Ball::MOVE, 0);
}
if (state.goRightKey) {
forces += sf::Vector2f(Ball::MOVE, 0);
}
// force d'attraction entre les balles et les blocs chargés
if (getCharge() != 0) {
for (int j = 0; j < state.objects.size(); j++) {
Object attractiveObject = *objects[j];
if (i == j || attractiveObject.getCharge() == 0) {
continue;
}
// vecteur allant de l'objet attirant vers l'objet considéré
sf::Vector2f attraction(
attractiveObject.getPosition() -
object.getPosition()
);
// la norme de ce vecteur est la distance entre les objets
float distanceSquared = attraction.x * attraction.x +
attraction.y * attraction.y;
// normalisation du vecteur direction qui porte
// la force d'attraction, puis application de la norme
attraction /= std::sqrt(distanceSquared);
attraction *= Ball::ATTRACTION * (
(objects[i].getCharge() * objects[j].getCharge()) /
distanceSquared
);
forces += attraction;
}
}
return forces;
}