void TraceLumpPoints(IInputObservable io) { io.Any().Buffer(io.OnEnd).Subscribe(es => { log($"<color=red>Seqeuence {es.Count} points</color>"); log($" {es[0]}"); if (es.Count > 2) { log($" {string.Join(",", es.Select((e, i) => (e, i)).Where((e, i) => 1 <= i && i < es.Count - 1).Select(x => x.e.position.ToString()))}"); } log($" {es[es.Count - 1]}"); foreach (var e in es) { switch (e.type) { case InputEventType.Begin: draw.Put(e, Color.red); break; case InputEventType.Move: draw.Put(e, Color.black); break; case InputEventType.End: draw.Put(e, Color.yellow); break; } } }).AddTo(disposables); }
public static IObservable <VerocityInfo> Verocity(this IInputObservable io) { return(io.OnBegin.SelectMany(e => Observable.Merge(Observable.Return(e), io.Any().TakeUntil(io.OnEnd.DelayFrame(1))) .TimeInterval() .Buffer(2, 1)) .Where(ts => ts.Count > 1) .Select(ts => VerocityInfo.Create(ts[0], ts[1]))); }
public static IObservable <IList <TimeInterval <InputEvent> > > TakeLastTimeIntervalBuffer(this IInputObservable io, int count) { // return io.Any().TakeUntil(io.End.DelayFrame(1)) // .TimeInterval() // .TakeLast(count) // .Buffer(count) // .RepeatUntilDestroy(io.Context.gameObject); return(io.OnBegin.SelectMany(e => Observable.Merge(Observable.Return(e), io.Any().TakeUntil(io.OnEnd.DelayFrame(1))) .TimeInterval() .TakeLast(count) .Buffer(count))); }
void TraceAllVerocity(IInputObservable io) { io.Any().Subscribe(e => { Debug.Log(e); draw.Put(e, Color.blue); }).AddTo(disposables); io.Verocity().Subscribe(v => { Debug.Log($">> {v}"); draw.Put(v, Color.magenta); }).AddTo(disposables); }
public static IObservable <Vector2> Difference(this IInputObservable io) { return(io.OnBegin.SelectMany(e => Observable.Merge(Observable.Return(e), io.Any().TakeUntil(io.OnEnd.DelayFrame(1))) .Buffer(2, 1)) .Where(events => events.Count > 1) .Select(events => { return new Vector2 { x = events[1].position.x - events[0].position.x, y = events[1].position.y - events[0].position.y }; })); }
void TraceLastVerocity(IInputObservable io, int count) { io.Any().Subscribe(e => { draw.Put(e, Color.blue); }).AddTo(disposables); io.TakeLastVerocities(count).Subscribe(vs => { log(string.Join(", ", vs.Select(vi => vi.ToString()))); foreach (var v in vs) { draw.Put(v, Color.magenta); } }).AddTo(disposables); }
// Rect Stream which completes when either one of io1 and io2 // Client have to Repeat() for permanent stream. public static IObservable <Rect> From(IInputObservable io1, IInputObservable io2) { var end = Observable.Merge(io1.OnEnd, io2.OnEnd); return(Observable.CombineLatest(io1.Any(), io2.Any()) .TakeUntil(end) .Select(es => { var x = Mathf.Min(es[0].position.x, es[1].position.x); var y = Mathf.Min(es[0].position.y, es[1].position.y); return new Rect(x, y, Mathf.Abs(es[0].position.x - es[1].position.x), Mathf.Abs(es[0].position.y - es[1].position.y)); }) .DistinctUntilChanged()); }
public static IObservable <TimeInterval <InputEvent> > TimeIntervalSequence(this IInputObservable io) { return(io.OnBegin.SelectMany(e => Observable.Merge(Observable.Return(e), io.Any().TakeUntil(io.OnEnd.DelayFrame(1))) .TimeInterval())); }