File size: 1,439 Bytes
18a519f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | using System;
namespace UnityEngine.InputSystem.Utilities
{
internal class TakeNObservable<TValue> : IObservable<TValue>
{
private IObservable<TValue> m_Source;
private int m_Count;
public TakeNObservable(IObservable<TValue> source, int count)
{
m_Source = source;
m_Count = count;
}
public IDisposable Subscribe(IObserver<TValue> observer)
{
return m_Source.Subscribe(new Take(this, observer));
}
private class Take : IObserver<TValue>
{
private IObserver<TValue> m_Observer;
private int m_Remaining;
public Take(TakeNObservable<TValue> observable, IObserver<TValue> observer)
{
m_Observer = observer;
m_Remaining = observable.m_Count;
}
public void OnCompleted()
{
}
public void OnError(Exception error)
{
Debug.LogException(error);
}
public void OnNext(TValue evt)
{
if (m_Remaining <= 0)
return;
m_Remaining--;
m_Observer.OnNext(evt);
if (m_Remaining == 0)
{
m_Observer.OnCompleted();
m_Observer = default;
}
}
}
}
}
|