Exemplo n.º 1
0
    //-----------------------------------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);
    }
Exemplo n.º 2
0
    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);
    }