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); }
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; }
public TriggerDataBundle(EventManager.EDTriggerExit triggerEvent) { eventCollider = triggerEvent.eventCollider; collisionCont = triggerEvent.collisionCont; interactionCont = triggerEvent.interactionCont; }