コード例 #1
0
    static public float GetCollMomentum(Collision2D coll, RbodyCollController collisionCont)
    {
        if (collisionCont == null)
        {
            return(0.0f);
        }


        // calculate momentum from ship
        float speedMomentum   = 0.0f;
        float angularMomentum = 0.0f;

        ContactPoint2D[] contacts = new ContactPoint2D[3];
        int num = coll.GetContacts(contacts);

        for (int i = 0; i < num; ++i)
        {
            ContactPoint2D contactPoint  = contacts[i];
            Vector2        dirToPoint    = contactPoint.point - collisionCont.worldCenterOfMass;
            float          circumference = 2.0f * Mathf.PI * dirToPoint.magnitude;
            float          angularSpeed  = (collisionCont.lastAngularVel / 360.0f) * circumference;
            Vector2        angularVel    = new Vector2(-dirToPoint.y, dirToPoint.x).normalized *angularSpeed;

            speedMomentum += Vector2.Dot(-contactPoint.normal, collisionCont.lastVel);
            float angularFactor = Vector2.Dot(-contactPoint.normal, angularVel) * 0.5F; // Reduce significance of angular momentum
            if (angularFactor > 0.0f)
            {
                angularMomentum += angularFactor;
            }
        }
        speedMomentum   /= num;
        angularMomentum /= num;
        return((speedMomentum + angularMomentum) * collisionCont.lastMass);
    }
コード例 #2
0
 public CollDataBundle(EventManager.EDCollisionExit collEvent)
 {
     collision       = new Coll2D(collEvent.flippedColl ? collEvent.collider : collEvent.collision2D.collider, collEvent.collision2D, collEvent.flippedColl);
     collisionCont   = collEvent.collisionCont;
     callback        = collEvent.collisionCallback;
     interactionCont = collEvent.interactionCont;
 }
コード例 #3
0
 public TriggerDataBundle(EventManager.EDTriggerExit triggerEvent)
 {
     eventCollider   = triggerEvent.eventCollider;
     collisionCont   = triggerEvent.collisionCont;
     interactionCont = triggerEvent.interactionCont;
 }