//-----------------------------------Impulse Calculation------------------------------------ public static ImpulseResult CalculateImpulse(PSI_RigidBody rb1, PSI_RigidBody rb2, Vector3 minTranslation) { ImpulseResult impulseResult; impulseResult.Impulse1 = Vector3.zero; impulseResult.Impulse2 = Vector3.zero; var impactVelocity = rb1.Velocity - rb2.Velocity; var inverseMass1 = 1.0f / rb1.pMass; var inverseMass2 = 1.0f / rb2.pMass; var vn = Vector3.Dot(impactVelocity, minTranslation.normalized); if (vn > 0.0f) { return(impulseResult); } var finalCoeffOfRest = rb1.pCoeffOfRest * rb2.pCoeffOfRest; var i = (-(1.0f + finalCoeffOfRest) * vn) / (inverseMass1 + inverseMass2); var impulse = minTranslation.normalized * i; impulseResult.Impulse1 = impulse * inverseMass1; impulseResult.Impulse2 = -impulse * inverseMass2; return(impulseResult); }
public static Vector3 CalculateImpulseAgainstStaticCollider(PSI_RigidBody rb, Vector3 minTranslation) { var impactVelocity = rb.Velocity; var inverseMass = 1.0f / rb.pMass; var vn = Vector3.Dot(impactVelocity, minTranslation.normalized); if (vn > 0.0f) { return(Vector3.zero); } var i = (-(1.0f + rb.pCoeffOfRest) * vn) / inverseMass; var impulse = minTranslation.normalized * i; return(impulse * inverseMass); }