Corrections mineures
This commit is contained in:
parent
b2e3c5f6cc
commit
80a9a2ef26
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue