private void _Unbind(Player player, Remoting.ISoulBinder binder) { binder.Unbind<IRealmJumper>(this); binder.Unbind<Regulus.Remoting.ITime>(LocalTime.Instance); var observe = player.FindAbility<IObserveAbility>(); if (observe != null) { observe.IntoEvent -= _ObservedInto; observe.LeftEvent -= _ObservedLeft; } foreach (var o in _Observeds) { binder.Unbind<IObservedAbility>(o); } binder.Unbind<IPlayer>(player); }
private void _Bind(Player player, Remoting.ISoulBinder binder) { binder.Bind<IPlayer>(player); var observe = player.FindAbility<IObserveAbility>(); if (observe != null) { _ObservedInto = (observed) => { binder.Bind<IObservedAbility>(observed); _Observeds.Add(observed); }; _ObservedLeft = (observed) => { _Observeds.Remove(observed); binder.Unbind<IObservedAbility>(observed); }; observe.IntoEvent += _ObservedInto; observe.LeftEvent += _ObservedLeft; } binder.Bind<Regulus.Remoting.ITime>(LocalTime.Instance); binder.Bind<IRealmJumper>(this); }