24. Limitations of .NET Events
//
public event Action<int> OnHitDamage;
//
player.OnHitDamage += (damage) =>
{
if (damage >= 1000)
{
// " "
}
};
player.OnHitDamage -= /* */
25. Observable Sequence to the Rescue
IObservable<int> onHitDamage = player.OnHitDamage;
var criticalHit = onHitDamage
.Where(x =>x >= 1000);
var subscription = criticalHit.Subscribe(damage => /* ... */);
subscription.Dispose();
LINQ
26. Lifecycle Resource Management
// Disposable
CompositeDisposable subscriptions = new CompositeDisposable();
void Awake()
{
var player = new Player();
var enemy1 = new Player();
var enemy2 = new Player();
//
player.OnHitDamage.Subscribe().AddTo(subscriptions);
enemy1.OnHitDamage.Subscribe().AddTo(subscriptions);
enemy2.OnHitDamage.Subscribe().AddTo(subscriptions);
}
void OnDestroy()
{
//
subscriptions.Dispose();
}