private void OnDisable()
 {
     this.isDraging = false;
     IT_Gesture.remove_onDraggingStartE(new IT_Gesture.DraggingStartHandler(this.OnDraggingStart));
     IT_Gesture.remove_onDraggingE(new IT_Gesture.DraggingHandler(this.OnDragging));
     IT_Gesture.remove_onDraggingEndE(new IT_Gesture.DraggingEndHandler(this.OnDraggingEnd));
 }
예제 #2
0
 public static void OnMouse1Down(Vector2 pos)
 {
     if (IT_Gesture.onMouse1DownE != null)
     {
         IT_Gesture.onMouse1DownE(pos);
     }
 }
예제 #3
0
    private void SwipeEnd(Vector2 startPos, Vector2 endPos, float timeStartSwipe, int index, bool isMouse)
    {
        if (onlyFireWhenLiftCursor)
        {
            if (!isMouse)
            {
                for (int i = 0; i < Input.touchCount; i++)
                {
                    Touch touch = Input.touches[i];
                    if (touch.fingerId == index)
                    {
                        return;
                    }
                }
            }
            else if (mouseIndex.Contains(index) || Time.realtimeSinceStartup - timeStartSwipe > maxSwipeDuration)
            {
                return;
            }
        }
        Vector2   dir = endPos - startPos;
        SwipeInfo sw  = new SwipeInfo(startPos, endPos, dir, timeStartSwipe, index, isMouse);

        IT_Gesture.SwipeEnd(sw);
        if (!(dir.magnitude < minDistance * IT_Gesture.GetDPIFactor()) && !(Time.time - lastSwipeTime < minDurationBetweenSwipe))
        {
            lastSwipeTime = Time.time;
            IT_Gesture.Swipe(sw);
        }
    }
예제 #4
0
 private void CheckMultiTapTouch(int index, Vector2 startPos, Vector2 lastPos)
 {
     if (index >= multiTapTouch.Length)
     {
         return;
     }
     if (multiTapTouch[index].lastTapTime > Time.realtimeSinceStartup - multiTapInterval)
     {
         if (Vector2.Distance(startPos, multiTapTouch[index].lastPos) < multiTapPosSpacing * IT_Gesture.GetDPIFactor())
         {
             multiTapTouch[index].count++;
             multiTapTouch[index].lastPos     = startPos;
             multiTapTouch[index].lastTapTime = Time.realtimeSinceStartup;
             IT_Gesture.MultiTap(new Tap(startPos, lastPos, multiTapTouch[index].count, index, im: false));
             if (multiTapTouch[index].count >= maxMultiTapCount)
             {
                 multiTapTouch[index].count = 0;
             }
         }
         else
         {
             multiTapTouch[index].count       = 1;
             multiTapTouch[index].lastPos     = startPos;
             multiTapTouch[index].lastTapTime = Time.realtimeSinceStartup;
             IT_Gesture.MultiTap(new Tap(startPos, lastPos, 1, index, im: false));
         }
     }
     else
     {
         multiTapTouch[index].count       = 1;
         multiTapTouch[index].lastPos     = startPos;
         multiTapTouch[index].lastTapTime = Time.realtimeSinceStartup;
         IT_Gesture.MultiTap(new Tap(startPos, lastPos, 1, index, im: false));
     }
 }
예제 #5
0
 public static void Rotate(RotateInfo RI)
 {
     if (IT_Gesture.onRotateE != null)
     {
         IT_Gesture.onRotateE(RI);
     }
 }
예제 #6
0
    // Use this for initialization
    void Start()
    {
        if (enableMultiTapFilter)
        {
            IT_Gesture.SetMultiTapFilter(enableMultiTapFilter);
            IT_Gesture.SetMaxMultiTapCount(maxMultiTapCount);
            IT_Gesture.SetMaxMultiTapInterval(multiTapInterval);
        }

        for (int i = 0; i < multiTapMouse.Length; i++)
        {
            multiTapMouse[i] = new MultiTapTracker(i);
        }
        for (int i = 0; i < multiTapTouch.Length; i++)
        {
            multiTapTouch[i] = new MultiTapTracker(i);
        }
        for (int i = 0; i < multiTapMFTouch.Length; i++)
        {
            multiTapMFTouch[i] = new MultiTapTracker(i);
        }

        StartCoroutine(CheckMultiTapCount());
        StartCoroutine(MultiFingerRoutine());

        //Debug.Log(IT_Gesture.GetTouch(0).position);
    }
예제 #7
0
 public static void DFDoubleTap(Vector2 pos)
 {
     if (IT_Gesture.onDFDoubleTapE != null)
     {
         IT_Gesture.onDFDoubleTapE(pos);
     }
 }
예제 #8
0
 public static void DFChargingEnd(ChargedInfo cInfo)
 {
     if (IT_Gesture.onDFChargeEndE != null)
     {
         IT_Gesture.onDFChargeEndE(cInfo);
     }
 }
예제 #9
0
 public static void OnMouse2(Vector2 pos)
 {
     if (IT_Gesture.onMouse2E != null)
     {
         IT_Gesture.onMouse2E(pos);
     }
 }
예제 #10
0
 public static void DFDraggingEnd(DragInfo dragInfo)
 {
     if (IT_Gesture.onDualFDraggingEndE != null)
     {
         IT_Gesture.onDualFDraggingEndE(dragInfo.pos);
     }
 }
예제 #11
0
    private void CheckFingerGroup(Touch touch)
    {
        bool flag = false;

        for (int i = 0; i < this.fingerGroup.Count; i++)
        {
            FingerGroup fingerGroup = this.fingerGroup[i];
            if (!(Time.realtimeSinceStartup - fingerGroup.triggerTime < shortTapTime / 2f))
            {
                continue;
            }
            bool flag2 = true;
            for (int j = 0; j < fingerGroup.indexes.Count; j++)
            {
                int iD = fingerGroup.indexes[j];
                if (Vector2.Distance(IT_Gesture.GetTouch(iD).position, touch.position) > maxFingerGroupDist * IT_Gesture.GetDPIFactor())
                {
                    flag2 = false;
                }
            }
            if (flag2)
            {
                fingerGroup.indexes.Add(touch.fingerId);
                fingerGroup.positions.Add(touch.position);
                flag = true;
                break;
            }
        }
        if (!flag)
        {
            this.fingerGroup.Add(new FingerGroup(Time.realtimeSinceStartup, touch.fingerId, touch.position));
            StartCoroutine(this.fingerGroup[this.fingerGroup.Count - 1].Routine(this));
        }
    }
예제 #12
0
 public static void Pinch(PinchInfo PI)
 {
     if (IT_Gesture.onPinchE != null)
     {
         IT_Gesture.onPinchE(PI);
     }
 }
예제 #13
0
    void Swiping(Vector2 startPos, Vector2 endPos, float timeStartSwipe, int index, bool isMouse)
    {
        Vector2   swipeDir = endPos - startPos;
        SwipeInfo sw       = new SwipeInfo(startPos, endPos, swipeDir, timeStartSwipe, index, isMouse);

        IT_Gesture.Swiping(sw);
    }
예제 #14
0
 public static void Swipe(SwipeInfo sw)
 {
     if (IT_Gesture.onSwipeE != null)
     {
         IT_Gesture.onSwipeE(sw);
     }
 }
예제 #15
0
    void CheckMultiTapMouse(int index, Vector2 startPos, Vector2 lastPos)
    {
        if (multiTapMouse[index].lastTapTime > Time.realtimeSinceStartup - multiTapInterval)
        {
            if (Vector2.Distance(startPos, multiTapMouse[index].lastPos) < multiTapPosSpacing * IT_Gesture.GetDPIFactor())
            {
                multiTapMouse[index].count      += 1;
                multiTapMouse[index].lastPos     = startPos;
                multiTapMouse[index].lastTapTime = Time.realtimeSinceStartup;

                IT_Gesture.MultiTap(new Tap(startPos, lastPos, multiTapMouse[index].count, index, true));

                if (multiTapMouse[index].count >= maxMultiTapCount)
                {
                    multiTapMouse[index].count = 0;
                }
            }
            else
            {
                multiTapMouse[index].count       = 1;
                multiTapMouse[index].lastPos     = startPos;
                multiTapMouse[index].lastTapTime = Time.realtimeSinceStartup;

                IT_Gesture.MultiTap(new Tap(startPos, lastPos, 1, index, true));
            }
        }
        else
        {
            multiTapMouse[index].count       = 1;
            multiTapMouse[index].lastPos     = startPos;
            multiTapMouse[index].lastTapTime = Time.realtimeSinceStartup;

            IT_Gesture.MultiTap(new Tap(startPos, lastPos, 1, index, true));
        }
    }
예제 #16
0
 public static void DFDragging(DragInfo dragInfo)
 {
     if (IT_Gesture.onDualFDraggingE != null)
     {
         IT_Gesture.onDualFDraggingE(dragInfo);
     }
 }
예제 #17
0
 public static void ShortTap(Vector2 pos)
 {
     if (IT_Gesture.onShortTapE != null)
     {
         IT_Gesture.onShortTapE(pos);
     }
 }
예제 #18
0
    // Update is called once per frame
    void Update()
    {
        if (Input.touchCount > 0)
        {
            //foreach(Touch touch in Input.touches){
            for (int i = 0; i < Input.touches.Length; i++)
            {
                Touch touch = Input.touches[i];
                //if(touch.phase==TouchPhase.Began) IT_Gesture.OnTouchDown(touch.position);
                //else if(touch.phase==TouchPhase.Ended) IT_Gesture.OnTouchUp(touch.position);
                //else IT_Gesture.OnTouch(touch.position);

                if (touch.phase == TouchPhase.Began)
                {
                    IT_Gesture.OnTouchDown(touch);
                }
                else if (touch.phase == TouchPhase.Ended)
                {
                    IT_Gesture.OnTouchUp(touch);
                }
                else
                {
                    IT_Gesture.OnTouch(touch);
                }

                //IT_Gesture.OnTouch(touch);
            }
        }
        else if (Input.touchCount == 0)
        {
            //#if !(UNITY_ANDROID || UNITY_IPHONE) || UNITY_EDITOR
            if (Input.GetMouseButtonDown(0))
            {
                IT_Gesture.OnMouse1Down(Input.mousePosition);
            }
            else if (Input.GetMouseButtonUp(0))
            {
                IT_Gesture.OnMouse1Up(Input.mousePosition);
            }
            else if (Input.GetMouseButton(0))
            {
                IT_Gesture.OnMouse1(Input.mousePosition);
            }

            if (Input.GetMouseButtonDown(1))
            {
                IT_Gesture.OnMouse2Down(Input.mousePosition);
            }
            else if (Input.GetMouseButtonUp(1))
            {
                IT_Gesture.OnMouse2Up(Input.mousePosition);
            }
            else if (Input.GetMouseButton(1))
            {
                IT_Gesture.OnMouse2(Input.mousePosition);
            }
            //#endif
        }
    }
예제 #19
0
 //called when pinch is detected
 void OnPinch(PinchInfo pinfo)
 {
     if (!ImageTarget.gameObject.activeInHierarchy)
     {
         return;
     }
     zoomSpeed -= pinfo.magnitude * zoomSpeedModifier / IT_Gesture.GetDPIFactor();
 }
예제 #20
0
 //called when one finger drag are detected
 void OnDragging(DragInfo dragInfo)
 {
     //apply the DPI scaling
     dragInfo.delta /= IT_Gesture.GetDPIFactor();
     //vertical movement is corresponded to rotation in x-axis
     orbitSpeedX = -dragInfo.delta.y * rotXSpeedModifier;
     //horizontal movement is corresponded to rotation in y-axis
     orbitSpeedY = dragInfo.delta.x * rotYSpeedModifier;
 }
예제 #21
0
    private IEnumerator TouchRoutine(int index)
    {
        fingerIndex.Add(index);
        bool    dragStarted = false;
        Vector2 startPos    = IT_Gesture.GetTouch(index).position;
        Vector2 lastPos     = startPos;
        float   timeStart   = float.PositiveInfinity;

        while ((enableMultiDrag && Input.touchCount > 0) || (!enableMultiDrag && Input.touchCount == 1))
        {
            Touch touch = IT_Gesture.GetTouch(index);
            if (touch.position == Vector2.zero)
            {
                break;
            }
            Vector2 curPos = touch.position;
            if (touch.phase == TouchPhase.Moved)
            {
                if (!dragStarted)
                {
                    if (Vector3.Distance(curPos, startPos) > (float)minDragDistance * IT_Gesture.GetDPIFactor())
                    {
                        dragStarted = true;
                        Vector2  delta3    = curPos - startPos;
                        DragInfo dragInfo4 = new DragInfo(curPos, delta3, 1, index, im: false);
                        IT_Gesture.DraggingStart(dragInfo4);
                        timeStart = Time.realtimeSinceStartup;
                    }
                }
                else if (curPos != lastPos)
                {
                    Vector2  delta2    = curPos - lastPos;
                    DragInfo dragInfo3 = new DragInfo(curPos, delta2, 1, index, im: false);
                    IT_Gesture.Dragging(dragInfo3);
                }
                lastPos = curPos;
            }
            else if (dragStarted && fireOnDraggingWhenNotMoving)
            {
                DragInfo dragInfo2 = new DragInfo(curPos, Vector2.zero, 1, index, im: false);
                IT_Gesture.Dragging(dragInfo2);
            }
            yield return(null);
        }
        if (dragStarted)
        {
            bool isFlick = false;
            if (Time.realtimeSinceStartup - timeStart < flickTimeRange)
            {
                isFlick = true;
            }
            Vector2  delta    = lastPos - startPos;
            DragInfo dragInfo = new DragInfo(lastPos, delta, 1, index, isFlick, im: false);
            IT_Gesture.DraggingEnd(dragInfo);
        }
        fingerIndex.Remove(index);
    }
예제 #22
0
    public void CheckMultiTapMFTouch(int fCount, Vector2[] posL, int[] indexes)
    {
        Vector2 a = Vector2.zero;

        for (int i = 0; i < posL.Length; i++)
        {
            a += posL[i];
        }
        a /= posL.Length;
        int  num  = 0;
        bool flag = false;

        for (int j = 0; j < multiTapMFTouch.Length; j++)
        {
            MultiTapTracker multiTapTracker = multiTapMFTouch[j];
            if (multiTapTracker.fingerCount == fCount && Vector2.Distance(a, multiTapTracker.lastPos) < multiTapPosSpacing * IT_Gesture.GetDPIFactor())
            {
                flag = true;
                break;
            }
            num++;
        }
        if (!flag)
        {
            num = 0;
            for (int k = 0; k < multiTapMFTouch.Length; k++)
            {
                MultiTapTracker multiTapTracker2 = multiTapMFTouch[k];
                if (multiTapTracker2.lastPos == Vector2.zero && multiTapTracker2.count == 0)
                {
                    break;
                }
                num++;
            }
        }
        if (multiTapMFTouch[num].lastTapTime > Time.realtimeSinceStartup - multiTapInterval)
        {
            multiTapMFTouch[num].count++;
            multiTapMFTouch[num].lastPos     = a;
            multiTapMFTouch[num].fingerCount = fCount;
            multiTapMFTouch[num].lastTapTime = Time.realtimeSinceStartup;
            IT_Gesture.MultiTap(new Tap(multiTapMFTouch[num].count, fCount, posL, indexes));
            if (multiTapMFTouch[num].count >= maxMultiTapCount)
            {
                multiTapMFTouch[num].count = 0;
            }
        }
        else
        {
            multiTapMFTouch[num].count       = 1;
            multiTapMFTouch[num].lastPos     = a;
            multiTapMFTouch[num].fingerCount = fCount;
            multiTapMFTouch[num].lastTapTime = Time.realtimeSinceStartup;
            IT_Gesture.MultiTap(new Tap(multiTapMFTouch[num].count, fCount, posL, indexes));
        }
    }
예제 #23
0
 public SwipeInfo(Vector2 p1, Vector2 p2, Vector2 dir, float startT, int ind, bool im)
 {
     startPoint = p1;
     endPoint   = p2;
     direction  = dir;
     angle      = IT_Gesture.VectorToAngle(dir);
     duration   = Time.realtimeSinceStartup - startT;
     speed      = dir.magnitude / duration;
     index      = ind;
     isMouse    = im;
 }
예제 #24
0
 public static void OnTouch(Touch touch)
 {
     if (IT_Gesture.onTouchPosE != null)
     {
         IT_Gesture.onTouchPosE(touch.position);
     }
     if (IT_Gesture.onTouchE != null)
     {
         IT_Gesture.onTouchE(touch);
     }
 }
예제 #25
0
    void SwipeEnd(Vector2 startPos, Vector2 endPos, float timeStartSwipe, int index, bool isMouse)
    {
        if (onlyFireWhenLiftCursor)
        {
            if (!isMouse)
            {
                for (int i = 0; i < Input.touchCount; i++)
                {
                    Touch touch = Input.touches[i];
                    if (touch.fingerId == index)
                    {
                        return;
                    }
                }
            }
            else
            {
                if (mouseIndex.Contains(index))
                {
                    //Debug.Log("mouse still down");
                    return;
                }
                if (Time.realtimeSinceStartup - timeStartSwipe > maxSwipeDuration)
                {
                    //Debug.Log("too long   "+(Time.realtimeSinceStartup-timeStartSwipe));
                    return;
                }
            }
        }



        Vector2   swipeDir = endPos - startPos;
        SwipeInfo sw       = new SwipeInfo(startPos, endPos, swipeDir, timeStartSwipe, index, isMouse);

        IT_Gesture.SwipeEnd(sw);

        if ((swipeDir).magnitude < minDistance * IT_Gesture.GetDPIFactor())
        {
            //GameMessage.DisplayMessage("too short");
            return;
        }

        if (Time.time - lastSwipeTime < minDurationBetweenSwipe)
        {
            return;
        }
        lastSwipeTime = Time.time;

        IT_Gesture.Swipe(sw);

        //GameMessage.DisplayMessage("swiped");
    }
예제 #26
0
    private IEnumerator MFTapCoroutine(Tap tap)
    {
        yield return(new WaitForSeconds((float)maxMultiTapCount * maxMultiTapInterval));

        if (MFtapExisted == tap.count)
        {
            MFtapExisted = 0;
            if (IT_Gesture.onMFMultiTapE != null)
            {
                IT_Gesture.onMFMultiTapE(tap);
            }
        }
    }
예제 #27
0
 //called when one finger drag are detected
 void OnDragging(DragInfo dragInfo)
 {
     if (!ImageTarget.gameObject.activeInHierarchy)
     {
         return;
     }
     //apply the DPI scaling
     dragInfo.delta /= IT_Gesture.GetDPIFactor();
     //vertical movement is corresponded to rotation in x-axis
     panSpeedY = dragInfo.delta.y * PanxSpeedModifier;
     //horizontal movement is corresponded to rotation in y-axis
     panSpeedX = dragInfo.delta.x * PanySpeedModifier;
 }
예제 #28
0
 public static void ChargeStart(ChargedInfo cInfo)
 {
     if (cInfo.fingerCount > 1)
     {
         if (IT_Gesture.onMFChargeStartE != null)
         {
             IT_Gesture.onMFChargeStartE(cInfo);
         }
     }
     else if (IT_Gesture.onChargeStartE != null)
     {
         IT_Gesture.onChargeStartE(cInfo);
     }
 }
예제 #29
0
 public static void DraggingStart(DragInfo dragInfo)
 {
     if (dragInfo.fingerCount > 1)
     {
         if (IT_Gesture.onMFDraggingStartE != null)
         {
             IT_Gesture.onMFDraggingStartE(dragInfo);
         }
     }
     else if (IT_Gesture.onDraggingStartE != null)
     {
         IT_Gesture.onDraggingStartE(dragInfo);
     }
 }
예제 #30
0
 private void Update()
 {
     if (Input.touchCount > 0)
     {
         for (int i = 0; i < Input.touches.Length; i++)
         {
             Touch touch = Input.touches[i];
             if (touch.phase == TouchPhase.Began)
             {
                 IT_Gesture.OnTouchDown(touch);
             }
             else if (touch.phase == TouchPhase.Ended)
             {
                 IT_Gesture.OnTouchUp(touch);
             }
             else
             {
                 IT_Gesture.OnTouch(touch);
             }
         }
     }
     else if (Input.touchCount == 0)
     {
         if (Input.GetMouseButtonDown(0))
         {
             IT_Gesture.OnMouse1Down(Input.mousePosition);
         }
         else if (Input.GetMouseButtonUp(0))
         {
             IT_Gesture.OnMouse1Up(Input.mousePosition);
         }
         else if (Input.GetMouseButton(0))
         {
             IT_Gesture.OnMouse1(Input.mousePosition);
         }
         if (Input.GetMouseButtonDown(1))
         {
             IT_Gesture.OnMouse2Down(Input.mousePosition);
         }
         else if (Input.GetMouseButtonUp(1))
         {
             IT_Gesture.OnMouse2Up(Input.mousePosition);
         }
         else if (Input.GetMouseButton(1))
         {
             IT_Gesture.OnMouse2(Input.mousePosition);
         }
     }
 }
예제 #31
0
 void Awake()
 {
     instance=this;
 }
예제 #32
0
 void Awake()
 {
     if (Instance == null)
         Instance=this;
 }
예제 #33
0
 void Awake()
 {
     instance = (IT_Gesture)target;
 }