private void UpdateTriggeringStatus() { Miscellaneous.FindHashSetDifference(_triggeringBodySet, _triggeringBodySetLast, _triggeringBodyEntered, _triggeringBodyExited); foreach (ICollisionTriggeringBody bodyEntered in _triggeringBodyEntered) { OnTriggerStart(bodyEntered); } foreach (ICollisionTriggeringBody bodyExited in _triggeringBodyExited) { OnTriggerEnd(bodyExited); } _triggeringBodySetLast.Clear(); _triggeringBodySetLast.CopyFrom(_triggeringBodySet); _triggeringBodySet.Clear(); }
protected override void UpdateTriggeringObject() { Miscellaneous.FindHashSetDifference( TriggeringObjectSet, TriggeringObjectSetLast, TriggeringObjectEntered, TriggeringObjectExited); foreach (T objectEntered in TriggeringObjectEntered) { OnTriggerStart(objectEntered); } foreach (T objectExited in TriggeringObjectExited) { OnTriggerEnd(objectExited); } TriggeringObjectSetLast.Clear(); TriggeringObjectSetLast.CopyFrom(TriggeringObjectSet); TriggeringObjectSet.Clear(); }
/// <summary> /// Update the color of the touched objects. From the latest set of touched objects, /// it finds which objects just come into contact. The color of these objects will /// be modified if needed. Then it finds which objects are no longer in contact. The /// color of these objects will be restored to original. /// </summary> /// <param name="touchableSet">Latest set of touched objects.</param> public void UpdateTouchedObjectColor(HashSet <ITouchable> touchableSet) { // Find touchable objects that comes in and the ones left our hand Miscellaneous.FindHashSetDifference(touchableSet, _lastTouchableSet, _touchableEnterSetTemp, _touchableExitSetTemp); // Colorize touchable objects that just come into contact with the hand foreach (ITouchable touchable in _touchableEnterSetTemp) { if (touchable.IndicateColorOnTouching) { ChangeTouchableObjectColorUponEnter(touchable); } } // Restore color of the touchable objects that leave the hand foreach (ITouchable touchable in _touchableExitSetTemp) { if (touchable.IndicateColorOnTouching) { RestoreTouchableObjectColorUponExit(touchable); } } _lastTouchableSet.Clear(); _lastTouchableSet.CopyFrom(touchableSet); }