暫無描述
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

WhereObservable.cs 1.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using System;
  2. namespace UnityEngine.InputSystem.Utilities
  3. {
  4. internal class WhereObservable<TValue> : IObservable<TValue>
  5. {
  6. private readonly IObservable<TValue> m_Source;
  7. private readonly Func<TValue, bool> m_Predicate;
  8. public WhereObservable(IObservable<TValue> source, Func<TValue, bool> predicate)
  9. {
  10. m_Source = source;
  11. m_Predicate = predicate;
  12. }
  13. public IDisposable Subscribe(IObserver<TValue> observer)
  14. {
  15. return m_Source.Subscribe(new Where(this, observer));
  16. }
  17. private class Where : IObserver<TValue>
  18. {
  19. private WhereObservable<TValue> m_Observable;
  20. private readonly IObserver<TValue> m_Observer;
  21. public Where(WhereObservable<TValue> observable, IObserver<TValue> observer)
  22. {
  23. m_Observable = observable;
  24. m_Observer = observer;
  25. }
  26. public void OnCompleted()
  27. {
  28. }
  29. public void OnError(Exception error)
  30. {
  31. Debug.LogException(error);
  32. }
  33. public void OnNext(TValue evt)
  34. {
  35. if (m_Observable.m_Predicate(evt))
  36. m_Observer.OnNext(evt);
  37. }
  38. }
  39. }
  40. }