Пример #1
0
        private static void UpdateGestures(bool stateChanged)
        {
            int num1 = 0;

            foreach (TouchLocation touchLocation in TouchPanel._gestureState)
            {
                num1 += touchLocation.State != TouchLocationState.Released ? 1 : 0;
            }
            if (num1 > 1)
            {
                TouchPanel._tapDisabled  = true;
                TouchPanel._holdDisabled = true;
            }
            foreach (TouchLocation touch in TouchPanel._gestureState)
            {
                switch (touch.State)
                {
                case TouchLocationState.Moved:
                case TouchLocationState.Pressed:
                    if (touch.State != TouchLocationState.Pressed || !TouchPanel.ProcessDoubleTap(touch))
                    {
                        if (TouchPanel.GestureIsEnabled(GestureType.Pinch) && num1 > 1)
                        {
                            if (TouchPanel._pinchTouch[0].State == TouchLocationState.Invalid || TouchPanel._pinchTouch[0].Id == touch.Id)
                            {
                                TouchPanel._pinchTouch[0] = touch;
                                break;
                            }
                            else if (TouchPanel._pinchTouch[1].State == TouchLocationState.Invalid || TouchPanel._pinchTouch[1].Id == touch.Id)
                            {
                                TouchPanel._pinchTouch[1] = touch;
                                break;
                            }
                            else
                            {
                                break;
                            }
                        }
                        else
                        {
                            float num2 = Vector2.Distance(touch.Position, touch.PressPosition);
                            if (TouchPanel._dragGestureStarted == GestureType.None && (double)num2 < 35.0)
                            {
                                TouchPanel.ProcessHold(touch);
                                break;
                            }
                            else if (stateChanged)
                            {
                                TouchPanel.ProcessDrag(touch);
                                break;
                            }
                            else
                            {
                                break;
                            }
                        }
                    }
                    else
                    {
                        break;
                    }

                case TouchLocationState.Released:
                    if (stateChanged)
                    {
                        if (TouchPanel._pinchGestureStarted && (touch.Id == TouchPanel._pinchTouch[0].Id || touch.Id == TouchPanel._pinchTouch[1].Id))
                        {
                            if (TouchPanel.GestureIsEnabled(GestureType.PinchComplete))
                            {
                                TouchPanel.GestureList.Enqueue(new GestureSample(GestureType.PinchComplete, touch.Timestamp, Vector2.Zero, Vector2.Zero, Vector2.Zero, Vector2.Zero));
                            }
                            TouchPanel._pinchGestureStarted = false;
                            TouchPanel._pinchTouch[0]       = TouchLocation.Invalid;
                            TouchPanel._pinchTouch[1]       = TouchLocation.Invalid;
                            break;
                        }
                        else if (num1 == 0)
                        {
                            if ((double)Vector2.Distance(touch.Position, touch.PressPosition) > 35.0 && (double)touch.Velocity.Length() > 100.0 && TouchPanel.GestureIsEnabled(GestureType.Flick))
                            {
                                TouchPanel.GestureList.Enqueue(new GestureSample(GestureType.Flick, touch.Timestamp, Vector2.Zero, Vector2.Zero, touch.Velocity, Vector2.Zero));
                                TouchPanel._dragGestureStarted = GestureType.None;
                                break;
                            }
                            else if (TouchPanel._dragGestureStarted != GestureType.None)
                            {
                                if (TouchPanel.GestureIsEnabled(GestureType.DragComplete))
                                {
                                    TouchPanel.GestureList.Enqueue(new GestureSample(GestureType.DragComplete, touch.Timestamp, Vector2.Zero, Vector2.Zero, Vector2.Zero, Vector2.Zero));
                                }
                                TouchPanel._dragGestureStarted = GestureType.None;
                                break;
                            }
                            else
                            {
                                TouchPanel.ProcessTap(touch);
                                break;
                            }
                        }
                        else
                        {
                            break;
                        }
                    }
                    else
                    {
                        break;
                    }
                }
            }
            if (!stateChanged)
            {
                return;
            }
            if (TouchPanel.GestureIsEnabled(GestureType.Pinch) && TouchPanel._pinchTouch[0].State != TouchLocationState.Invalid && TouchPanel._pinchTouch[1].State != TouchLocationState.Invalid)
            {
                TouchPanel.ProcessPinch(TouchPanel._pinchTouch);
            }
            else
            {
                TouchPanel._pinchGestureStarted = false;
                TouchPanel._pinchTouch[0]       = TouchLocation.Invalid;
                TouchPanel._pinchTouch[1]       = TouchLocation.Invalid;
            }
            if (num1 != 0)
            {
                return;
            }
            TouchPanel._tapDisabled        = false;
            TouchPanel._holdDisabled       = false;
            TouchPanel._dragGestureStarted = GestureType.None;
        }