Corrections mineures

This commit is contained in:
Mattéo Delabre 2016-03-15 22:17:08 +01:00
parent b2e3c5f6cc
commit 80a9a2ef26
2 changed files with 7 additions and 20 deletions

View File

@ -165,7 +165,7 @@ bool Ball::getNormal(Block& obj, sf::Vector2f& normal) {
// si la balle est à l'extérieur et que
// la normale est plus longue que son rayon,
// il n'y a pas collision
if (!isInside && squaredLength > 20 * 20) {
if (!isInside && squaredLength >= 20 * 20) {
return false;
}

View File

@ -85,26 +85,13 @@ void Engine::update() {
continue;
}
float restitution = std::min(objA->getRestitution(), objB->getRestitution());
// calcul de l'inverse des masses de A et B. Pour rappel,
// une masse infinie est modélisée par 0, donc l'inverse
// d'une telle masse est nul
float invMassA = objA->getMass();
float invMassB = objB->getMass();
if (invMassA != 0) {
invMassA = 1.f / invMassA;
}
if (invMassB != 0) {
invMassB = 1.f / invMassB;
}
// calcule et applique l'impulsion de résolution de la collision
float impulse = (-(1 + restitution) * dotnormal) / (invMassA + invMassB);
objA->setVelocity(objA->getVelocity() - invMassA * impulse * normal);
objB->setVelocity(objB->getVelocity() + invMassB * impulse * normal);
float restitution = std::min(objA->getRestitution(), objB->getRestitution());
float impulse = (-(1 + restitution) * dotnormal) /
(objA->getMassInvert() + objB->getMassInvert());
objA->setVelocity(objA->getVelocity() - objA->getMassInvert() * impulse * normal);
objB->setVelocity(objB->getVelocity() + objB->getMassInvert() * impulse * normal);
}
}
}