예제 #1
0
    private Position _position = Position.Center; // maybe this should be a property global to all gestures (so f.ex Update(touches, position)

    public InteractionContinuation Update(Touch2[] touches)
    {
        var touch = touches.FirstOrDefault();

        if (_processingGesture)
        {
            ProcessGesture();
            return(InteractionContinuation.End());
        }

        if (touch != null && touch.Phase == TouchPhase.Began)
        {
            BeginTrackingGesture();
            return(DetermineIgnorableGestureContinuation());
        }

        if (_ignorableGestureDetected)
        {
            return(DetermineIgnorableGestureContinuation());
        }

        if (touch != null && _isTrackingGesture)
        {
            TrackGesture(touch);
            return(_ignorableGestureDetected ? DetermineIgnorableGestureContinuation() : InteractionContinuation.End());
        }

        return(InteractionContinuation.Next());
    }
예제 #2
0
 private InteractionContinuation DetermineIgnorableGestureContinuation()
 {
     if (_position != Position.Center)
     {
         return(InteractionContinuation.End()); // we're outside game area, disallow camera gestures
     }
     return(InteractionContinuation.Next());    // allow camera gestures
 }
예제 #3
0
        InteractionContinuation HandleOutOfBoundsTouch()
        {
            if (!_interactionInProgress) // if no interaction in progress, we don't care
            {
                return(InteractionContinuation.Next());
            }

            FinishGesture();
            return(InteractionContinuation.End());
        }
예제 #4
0
    public InteractionContinuation Update(Touch2[] touches)
    {
        if (touches.Any())
        {
            var touch = touches.First();
            PanCamera(touch);
        }
        else
        {
            MaybeApplyInertia();
        }

        return(InteractionContinuation.Next());
    }
예제 #5
0
        public InteractionContinuation Update(Touch2[] touches)
        {
            if (!touches.Any())
            {
                return(InteractionContinuation.Next());
            }

            var touch = touches.First();

            var ev = TryHitRessi(touch);

            return(ev != null
                ? HandleRessiTouch(ev)
                : HandleOutOfBoundsTouch());
        }
예제 #6
0
        InteractionContinuation HandleRessiTouch(CuddleEvent ev)
        {
            if (ev.Touch.Phase == TouchPhase.Began)
            {
                StartCuddling(ev.Ressi);
                TryHighfive(ev);
                return(InteractionContinuation.End());
            }

            if (!_interactionInProgress)
            {
                return(InteractionContinuation.Next());
            }

            AppendMovementDelta(ev.Touch);
            TryInteract(ev);

            return(InteractionContinuation.End());
        }
    public InteractionContinuation Update(Touch2[] touches)
    {
        if (!touches.Any())
        {
            return(InteractionContinuation.Next());
        }

        var touch = touches.First();

        MaybeDeselectObject(touch);
        MaybeSelectObject(touch);

        MaybeMoveSelectedObject(touch);

        if (_selectedObject == null)
        {
            return(InteractionContinuation.Next());
        }
        return(InteractionContinuation.End());
    }
    public InteractionContinuation Update(Touch2[] touches)
    {
        if (_started)
        {
            return(InteractionContinuation.End());
        }

        if (!SingleTouchBegan(touches))
        {
            return(InteractionContinuation.Next());
        }

        var touch = touches[0];

        if (!HitStartButton(touch))
        {
            return(InteractionContinuation.Next());
        }

        _started = true;
        StartPlaying();
        return(InteractionContinuation.End());
    }
예제 #9
0
    public InteractionContinuation Update(Touch2[] touches)
    {
        if (!Enabled)
        {
            return(InteractionContinuation.End());
        }

        if (touches.Length == 1)
        {
            var touch = touches[0];
            switch (touch.Phase)
            {
            case TouchPhase.Began:
                TryStartGesture(touch);
                break;

            case TouchPhase.Moved:
                TryAddStroke(touch);
                break;

            case TouchPhase.Ended:
                TryAddStroke(touch);
                TryFinishStroke();
                break;

            case TouchPhase.Canceled:
                TryFinishStroke();
                break;
            }
        }
        else if (_isDrawing && Time.time > (_lastTouch + _graceTimeInSeconds))
        {
            FinalizeGesture();
        }

        return(InteractionContinuation.End());
    }