Beispiel #1
0
    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);
    }
Beispiel #2
0
 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])));
 }
Beispiel #3
0
 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)));
 }
Beispiel #4
0
    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);
    }
Beispiel #5
0
 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
         };
     }));
 }
Beispiel #6
0
    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);
    }
Beispiel #7
0
        // 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());
        }
Beispiel #8
0
 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()));
 }