/// <summary> /// Adds an callback to an listener. /// </summary> /// <typeparam name="T">Type of the observed propert</typeparam> /// <param name="monitor">Listener to extend.</param> /// <param name="eventHandler">The event handler to register to the listener.</param> /// <returns>The listener itself for chaining.</returns> public static IPropertyListener Call <T>( this IPropertyMonitor <T> monitor, EventHandler <OnPropertyChangedEventArgs <T> > eventHandler) { monitor.PropertyChanged += eventHandler; return(monitor); }
public MultiPlayerPropertyMonitor(Player p, IEnumerable <IPropertyMonitor <T> > propertyMonitors) : base(propertyMonitors) { //ValueChanged.Add(self => ((IPropertyMonitor)self).ValueChanged.Invoke(self)); //ValueChanged.Add(self => ((IPropertyMonitor<T>)self).ValueChanged.Invoke(self)); //ValueChanged.Add(self => ((IEntityPropertyMonitor)self).ValueChanged.Invoke(self)); //ValueChanged.Add(self => ((IEntityPropertyMonitor<T>)self).ValueChanged.Invoke(self)); //ValueChanged.Add(self => ((IPlayerPropertyMonitor)self).ValueChanged.Invoke(self)); Player = p; IPropertyMonitor <T> self = this; self.ValueChanged.Add(s => ((IEntityPropertyMonitor)s).ValueChanged.Invoke(this)); self.ValueChanged.Add(s => ((IEntityPropertyMonitor <T>)s).ValueChanged.Invoke(this)); self.ValueChanged.Add(s => ((IPlayerPropertyMonitor)s).ValueChanged.Invoke(this)); self.ValueChanged.Add(s => ((IPlayerPropertyMonitor <T>)s).ValueChanged.Invoke(this)); }
void PropValueChanged(IPropertyMonitor <T> propMonitor) { T newValue = propMonitor.Value; if (!Value.Equals(newValue)) { Value = newValue; Property = propMonitor.Property; if (!(Property == null || propMonitor.Property == null || propMonitor.Property.LastChangedTick >= Property.LastChangedTick)) { Debugger.Break(); } ValueChanged.Invoke(this); } }
private void InternalValueChanged(IPropertyMonitor p) { Debug.Assert(InternalPropertyMonitor == p); ValueChanged.Invoke(this); }
/// <summary> /// Adds an condition to the listener, to filter all notifications. /// </summary> /// <typeparam name="T">Type of the property to notify.</typeparam> /// <param name="monitor">The listener to filter.</param> /// <param name="predicate">The filter condition.</param> /// <returns>The condition property listener.</returns> public static IPropertyMonitor <T> If <T>(this IPropertyMonitor <T> monitor, Func <T, bool> predicate) { return(new PredicatePropertyMonitor <T>(monitor, predicate)); }