private void SaveCollisionEnterData(EventManager.EDCollisionEnter event1, EventManager.EDCollisionEnter event2) { // create collision data CollEnterDataBundle collEnterData1 = new CollEnterDataBundle(event1); CollEnterDataBundle collEnterData2 = new CollEnterDataBundle(event2); // calculate collision momentum if desired if (event1.momentumCalcRequired || event2.momentumCalcRequired) { // calculate collision momentum for non static objects if (!event1.interactionCont.SupportsInteraction(INTERACTION.COLL_IS_STATIC)) { collEnterData1.collMomentum = GetCollMomentum(event1.collision2D, event1.collisionCont); } if (!event2.interactionCont.SupportsInteraction(INTERACTION.COLL_IS_STATIC)) { collEnterData2.collMomentum = GetCollMomentum(event2.collision2D, event2.collisionCont); } } // create the internal data CollisionEnterDataInternal internalData = new CollisionEnterDataInternal(collEnterData1, collEnterData2); internalCollEnterData.Add(internalData); // save collision enter data for both objects SaveDataHelper <CollisionEnterDataInternal, CollEnterDataBundle, CollisionEnterData>(event1.interactionCont, event2.interactionCont, internalData, collEnterData1, collEnterData2, AddCollisionEnterDataToInfoBundle); SaveDataHelper <CollisionEnterDataInternal, CollEnterDataBundle, CollisionEnterData>(event2.interactionCont, event1.interactionCont, internalData, collEnterData2, collEnterData1, AddCollisionEnterDataToInfoBundle); }
public CollEnterDataBundle(EventManager.EDCollisionEnter 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 void OnCollisionEnterEvent(EventManager.EDCollisionEnter eventData) { OrganizeEvent(eventData.interactionCont, eventData.otherInteractionCont, eventData, collEnterEventData, CollEnterMatches, SaveCollisionEnterData); }
private bool CollEnterMatches(EventManager.EDCollisionEnter coll1, EventManager.EDCollisionEnter coll2) { return(coll1.collider == coll2.collision2D.collider && coll2.collider == coll1.collision2D.collider); }
private void CompleteUnmatchedEvents() { // report unmatched events // TODO : option to pass dummy data with unmatched event to complete it foreach (KeyValuePair <int, List <EventManager.EDCollisionEnter> > eventList in collEnterEventData) { foreach (EventManager.EDCollisionEnter eventData in eventList.Value) { EventManager.EDCollisionEnter flippedEventData = new EventManager.EDCollisionEnter(); flippedEventData.collider = eventData.collider; flippedEventData.interactionCont = eventData.otherInteractionCont; flippedEventData.otherInteractionCont = eventData.interactionCont; flippedEventData.collisionCont = eventData.otherInteractionCont.GetRbodyCollCont(); flippedEventData.collision2D = eventData.collision2D; flippedEventData.momentumCalcRequired = eventData.momentumCalcRequired; flippedEventData.flippedColl = true; // if either collider is null do not save if (eventData.collider == null || flippedEventData.collider == null) { return; } SaveCollisionEnterData(eventData, flippedEventData); } } foreach (KeyValuePair <int, List <EventManager.EDCollisionStay> > eventList in collStayEventData) { foreach (EventManager.EDCollisionStay eventData in eventList.Value) { EventManager.EDCollisionStay flippedEventData = new EventManager.EDCollisionStay(); flippedEventData.collider = eventData.collider; flippedEventData.interactionCont = eventData.otherInteractionCont; flippedEventData.otherInteractionCont = eventData.interactionCont; flippedEventData.collisionCont = eventData.otherInteractionCont.GetRbodyCollCont(); flippedEventData.collision2D = eventData.collision2D; flippedEventData.flippedColl = true; SaveCollisionStayData(eventData, flippedEventData); } } foreach (KeyValuePair <int, List <EventManager.EDCollisionExit> > eventList in collExitEventData) { foreach (EventManager.EDCollisionExit eventData in eventList.Value) { EventManager.EDCollisionExit flippedEventData = new EventManager.EDCollisionExit(); flippedEventData.collider = eventData.collider; flippedEventData.interactionCont = eventData.otherInteractionCont; flippedEventData.otherInteractionCont = eventData.interactionCont; flippedEventData.collisionCont = eventData.otherInteractionCont.GetRbodyCollCont(); flippedEventData.collision2D = eventData.collision2D; flippedEventData.flippedColl = true; SaveCollisionExitData(eventData, flippedEventData); } } foreach (KeyValuePair <int, List <EventManager.EDTriggerEnter> > eventList in triggerEnterEventData) { foreach (EventManager.EDTriggerEnter eventData in eventList.Value) { EventManager.EDTriggerEnter flippedEventData = new EventManager.EDTriggerEnter(); flippedEventData.collider = eventData.eventCollider; flippedEventData.eventCollider = eventData.collider; flippedEventData.interactionCont = eventData.otherInteractionCont; flippedEventData.otherInteractionCont = eventData.interactionCont; flippedEventData.collisionCont = eventData.otherInteractionCont.GetRbodyCollCont(); SaveTriggerEnterData(eventData, flippedEventData); } } foreach (KeyValuePair <int, List <EventManager.EDTriggerStay> > eventList in triggerStayEventData) { foreach (EventManager.EDTriggerStay eventData in eventList.Value) { EventManager.EDTriggerStay flippedEventData = new EventManager.EDTriggerStay(); flippedEventData.collider = eventData.eventCollider; flippedEventData.eventCollider = eventData.collider; flippedEventData.interactionCont = eventData.otherInteractionCont; flippedEventData.otherInteractionCont = eventData.interactionCont; flippedEventData.collisionCont = eventData.otherInteractionCont.GetRbodyCollCont(); SaveTriggerStayData(eventData, flippedEventData); } } foreach (KeyValuePair <int, List <EventManager.EDTriggerExit> > eventList in triggerExitEventData) { foreach (EventManager.EDTriggerExit eventData in eventList.Value) { EventManager.EDTriggerExit flippedEventData = new EventManager.EDTriggerExit(); flippedEventData.collider = eventData.eventCollider; flippedEventData.eventCollider = eventData.collider; flippedEventData.interactionCont = eventData.otherInteractionCont; flippedEventData.otherInteractionCont = eventData.interactionCont; flippedEventData.collisionCont = eventData.otherInteractionCont.GetRbodyCollCont(); SaveTriggerExitData(eventData, flippedEventData); } } }