private void SaveTriggerExitData(EventManager.EDTriggerExit event1, EventManager.EDTriggerExit event2)
    {
        // create collision data
        TriggerStayExitDataBundle data1 = new TriggerStayExitDataBundle(event1);
        TriggerStayExitDataBundle data2 = new TriggerStayExitDataBundle(event2);

        // create the internal data
        TriggerStayExitDataInternal internalData = new TriggerStayExitDataInternal(data1, data2);

        internalTriggerStayExitData.Add(internalData);

        // save collision enter data for both objects
        SaveDataHelper <TriggerStayExitDataInternal, TriggerStayExitDataBundle, TriggerStayExitData>(event1.interactionCont, event2.interactionCont,
                                                                                                     internalData, data1, data2, AddTriggerExitDataToInfoBundle);
        SaveDataHelper <TriggerStayExitDataInternal, TriggerStayExitDataBundle, TriggerStayExitData>(event2.interactionCont, event1.interactionCont,
                                                                                                     internalData, data2, data1, AddTriggerExitDataToInfoBundle);
    }
 public void OnTriggerExitEvent(EventManager.EDTriggerExit eventData)
 {
     OrganizeEvent(eventData.interactionCont, eventData.otherInteractionCont, eventData, triggerExitEventData, TriggerExitMatches, SaveTriggerExitData);
 }
 private bool TriggerExitMatches(EventManager.EDTriggerExit coll1, EventManager.EDTriggerExit coll2)
 {
     return(coll1.collider == coll2.eventCollider && coll2.collider == coll1.eventCollider);
 }
    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);
            }
        }
    }
 public TriggerStayExitDataBundle(EventManager.EDTriggerExit triggerEvent) : base(triggerEvent)
 {
     this.callback = triggerEvent.triggerCallback;
 }
 public TriggerDataBundle(EventManager.EDTriggerExit triggerEvent)
 {
     eventCollider   = triggerEvent.eventCollider;
     collisionCont   = triggerEvent.collisionCont;
     interactionCont = triggerEvent.interactionCont;
 }