/// <summary> /// Adds a new subscriber to this Collision Subscription /// </summary> /// <param name="newSubscriber"></param> /// <returns></returns> public CollisonSubscriberHolder Register(ICollisionSubscriber newSubscriber) { CollisonSubscriberHolder newHolder = new CollisonSubscriberHolder(newSubscriber); this.listOfSubscribers.PushFront(newHolder); return(newHolder); }
/// <summary> /// Remove a subscriber from this subscription /// </summary> /// <param name="oldSubscriber"></param> /// <returns></returns> public bool Unregister(ICollisionSubscriber oldSubscriber) { CollisonSubscriberHolder oldHolder = this.Search(oldSubscriber); Debug.Assert(oldHolder != null); oldHolder.Reset(); this.listOfSubscribers.Pop(oldHolder); oldHolder = null; return(true); }
// // Private Methods // /// <summary> /// Return a CollisonSubscriberHolder given an ICollisionScriber /// </summary> /// <param name="queriedSubscriber"></param> /// <returns></returns> private CollisonSubscriberHolder Search(ICollisionSubscriber queriedSubscriber) { CollisonSubscriberHolder itr = this.listOfSubscribers.Head as CollisonSubscriberHolder; while (itr != null) { if (ReferenceEquals(itr.Subscriber, queriedSubscriber)) { break; // Found it } itr = itr.next as CollisonSubscriberHolder; } return(itr); }
/// <summary> /// Removes an observer from this collison pair /// </summary> /// <param name="oldSubscriber"></param> /// <returns></returns> public bool Unsubscribe(ICollisionSubscriber oldSubscriber) { return(this.subscription.Unregister(oldSubscriber)); }
/// <summary> /// Adds a new observer to this collison pair /// </summary> /// <param name="newSubscriber"></param> public void Subscribe(ICollisionSubscriber newSubscriber) { this.subscription.Register(newSubscriber); }
/// <summary> /// Removes the subscriber from the subscription /// </summary> public override void Reset() { this.subscriber = null; }
// // Constructor // public CollisonSubscriberHolder(ICollisionSubscriber newSubscriber) : base() { this.subscriber = newSubscriber; }