- // Define impulse
- float massRatio = 1f / (invMassA + invMassB);
- float impulse = -(1f + restitution) * dot(relativeVelocity, normal) * massRatio;
- // Accumulate impulse
- float newImpulse = Math.min(impulse + contact.impulse, 0);
- impulse = newImpulse - contact.impulse;
- contact.impulse = newImpulse;
- // Apply impulses
- velA += normal * impulse * invMassA;
- velB -= normal * impulse * invMassB;