Ejemplo n.º 1
0
    IEnumerator MouseRoutine(int index)
    {
        mouseIndex.Add(index);

        bool dragStarted = false;

        Vector2 startPos = Input.mousePosition;
        Vector2 lastPos  = startPos;

        float timeStart = Mathf.Infinity;

        while (mouseIndex.Contains(index))
        {
            Vector2 curPos = Input.mousePosition;

            if (!dragStarted)
            {
                if (Vector3.Distance(curPos, startPos) > minDragDistance)
                {
                    dragStarted = true;
                    Vector2  delta    = curPos - startPos;
                    DragInfo dragInfo = new DragInfo(curPos, delta, 1, index, true);
                    Gesture.DraggingStart(dragInfo);

                    timeStart = Time.time;
                }
            }
            else
            {
                if (curPos != lastPos)
                {
                    Vector2  delta    = curPos - lastPos;
                    DragInfo dragInfo = new DragInfo(curPos, delta, 1, index, true);
                    Gesture.Dragging(dragInfo);
                }
            }

            lastPos = curPos;

            yield return(null);
        }

        if (dragStarted)
        {
            bool isFlick = false;
            if (Time.time - timeStart < 0.5f)
            {
                isFlick = true;
            }

            Vector2  delta    = lastPos - startPos;
            DragInfo dragInfo = new DragInfo(lastPos, delta, 1, index, isFlick, true);

            Gesture.DraggingEnd(dragInfo);
        }
    }
Ejemplo n.º 2
0
    IEnumerator TouchRoutine(int index)
    {
        fingerIndex.Add(index);

        bool dragStarted = false;

        Vector2 startPos = Gesture.GetTouch(index).position;
        Vector2 lastPos  = startPos;

        while ((enableMultiDrag && Input.touchCount > 0) || (!enableMultiDrag && Input.touchCount == 1))
        {
            Touch touch = Gesture.GetTouch(index);
            if (touch.position == Vector2.zero)
            {
                break;
            }

            Vector2 curPos = touch.position;

            if (!dragStarted)
            {
                if (Vector3.Distance(curPos, startPos) > minDragDistance)
                {
                    dragStarted = true;
                    Vector2  delta    = curPos - startPos;
                    DragInfo dragInfo = new DragInfo(curPos, delta, 1, index, false);
                    Gesture.DraggingStart(dragInfo);
                }
            }
            else
            {
                if (curPos != lastPos)
                {
                    Vector2  delta    = curPos - lastPos;
                    DragInfo dragInfo = new DragInfo(curPos, delta, 1, index, false);
                    Gesture.Dragging(dragInfo);
                }
            }

            lastPos = curPos;

            yield return(null);
        }

        if (dragStarted)
        {
            Vector2  delta    = lastPos - startPos;
            DragInfo dragInfo = new DragInfo(lastPos, delta, 1, index, false);
            Gesture.DraggingEnd(dragInfo);
        }

        fingerIndex.Remove(index);
    }
Ejemplo n.º 3
0
    IEnumerator MultiDragRoutine(int count)
    {
        bool dragStarted = false;

        Vector2 startPos = Vector2.zero;

        for (int i = 0; i < Input.touchCount; i++)
        {
            startPos += Input.touches[i].position;
        }
        startPos /= Input.touchCount;
        Vector2 lastPos = startPos;

        while (Input.touchCount == count)
        {
            Vector2   curPos = Vector2.zero;
            Vector2[] allPos = new Vector2[count];
            bool      moving = true;
            for (int i = 0; i < count; i++)
            {
                Touch touch = Input.touches[i];
                curPos   += touch.position;
                allPos[i] = touch.position;
                if (touch.phase != TouchPhase.Moved)
                {
                    moving = false;
                }
            }
            curPos /= count;

            bool sync = true;
            if (moving)
            {
                for (int i = 0; i < count - 1; i++)
                {
                    Vector2 v1 = Input.touches[i].deltaPosition.normalized;
                    Vector2 v2 = Input.touches[i + 1].deltaPosition.normalized;
                    if (Vector2.Dot(v1, v2) < 0.85f)
                    {
                        sync = false;
                    }
                }
            }

            if (moving && sync)
            {
                if (!dragStarted)
                {
                    if (Vector2.Distance(curPos, startPos) > minDragDistance)
                    {
                        dragStarted = true;
                        Vector2  delta    = curPos - startPos;
                        DragInfo dragInfo = new DragInfo(curPos, delta, count);
                        Gesture.DraggingStart(dragInfo);
                    }
                }
                else
                {
                    if (curPos != lastPos)
                    {
                        Vector2  delta    = curPos - lastPos;
                        DragInfo dragInfo = new DragInfo(curPos, delta, count);
                        Gesture.Dragging(dragInfo);
                    }
                }
            }

            lastPos = curPos;

            yield return(null);
        }

        if (dragStarted)
        {
            Vector2  delta    = lastPos - startPos;
            DragInfo dragInfo = new DragInfo(lastPos, delta, count);
            Gesture.DraggingEnd(dragInfo);
        }
    }
Ejemplo n.º 4
0
    // Update is called once per frame
    void Update()
    {
        //#if UNITY_IPHONE || UNITY_ANDROID

        if (Input.touchCount > 0)
        {
            foreach (Touch touch in Input.touches)
            {
                if (touch.phase == TouchPhase.Began)
                {
                    Gesture.OnTouchDown(touch.position);
                }
                else if (touch.phase == TouchPhase.Ended)
                {
                    Gesture.OnTouchUp(touch.position);
                }
                else
                {
                    Gesture.OnTouch(touch.position);
                }
            }
        }

        if (Input.GetMouseButtonDown(0))
        {
            Gesture.OnMouse1Down(Input.mousePosition);
        }
        else if (Input.GetMouseButtonUp(0))
        {
            Gesture.OnMouse1Up(Input.mousePosition);
        }
        else if (Input.GetMouseButton(0))
        {
            Gesture.OnMouse1(Input.mousePosition);
        }

        if (Input.GetMouseButtonDown(1))
        {
            Gesture.OnMouse2Down(Input.mousePosition);
        }
        else if (Input.GetMouseButtonUp(1))
        {
            Gesture.OnMouse2Up(Input.mousePosition);
        }
        else if (Input.GetMouseButton(1))
        {
            Gesture.OnMouse2(Input.mousePosition);
        }


        //drag event detection goes here
        InputEvent inputEvent = new InputEvent();

        if (Input.touchCount == 1)
        {
            Touch       touch = Input.touches[0];
            _InputState state;
            if (touch.phase == TouchPhase.Began)
            {
                state = _InputState.Down;
            }
            else if (touch.phase == TouchPhase.Ended)
            {
                state = _InputState.Up;
            }
            else
            {
                state = _InputState.On;
            }
            inputEvent = new InputEvent(touch.position, _InputType.Touch, state);
        }
        else if (Input.touchCount == 0)
        {
            if (Input.GetMouseButtonDown(0))
            {
                inputEvent = new InputEvent(Input.mousePosition, _InputType.Mouse1, _InputState.Down);
            }
            else if (Input.GetMouseButton(0))
            {
                inputEvent = new InputEvent(Input.mousePosition, _InputType.Mouse1, _InputState.On);
            }
            else if (Input.GetMouseButtonUp(0))
            {
                inputEvent = new InputEvent(Input.mousePosition, _InputType.Mouse1, _InputState.Up);
            }
            else if (Input.GetMouseButtonDown(1))
            {
                inputEvent = new InputEvent(Input.mousePosition, _InputType.Mouse2, _InputState.Down);
            }
            else if (Input.GetMouseButton(1))
            {
                inputEvent = new InputEvent(Input.mousePosition, _InputType.Mouse2, _InputState.On);
            }
            else if (Input.GetMouseButtonUp(1))
            {
                inputEvent = new InputEvent(Input.mousePosition, _InputType.Mouse2, _InputState.Up);
            }
        }

        if (inputEvent.inputType != _InputType.None)
        {
            if (inputEvent.inputState == _InputState.Down)
            {
                lastPos           = inputEvent.pos;
                draggingInitiated = true;
            }
            if (inputEvent.inputState == _InputState.On)
            {
                Vector2 curPos = inputEvent.pos;

                if (!draggingInitiated)
                {
                    draggingInitiated = true;
                }
                else
                {
                    Vector2 delta = curPos - lastPos;
                    if (Mathf.Abs((delta).magnitude) > 0)
                    {
                        dragging = true;

                        int inputType = 0;
                        if (inputEvent.inputType == _InputType.Mouse1)
                        {
                            inputType = 1;
                        }
                        else if (inputEvent.inputType == _InputType.Mouse2)
                        {
                            inputType = 2;
                        }

                        DragInfo dragInfo = new DragInfo(inputType, curPos, delta);
                        Gesture.Dragging(dragInfo);
                    }
                    else
                    {
                        draggingInitiated = false;
                    }
                }

                lastPos = inputEvent.pos;
            }
            if (inputEvent.inputState == _InputState.Up)
            {
                if (dragging)
                {
                    dragging = false;
                    Gesture.DraggingEnd(inputEvent.pos);
                }
                if (draggingInitiated)
                {
                    draggingInitiated = false;
                }
            }
        }
        else
        {
            if (dragging)
            {
                dragging = false;
                Gesture.DraggingEnd(inputEvent.pos);
            }
            if (draggingInitiated)
            {
                draggingInitiated = false;
            }
        }

        //if(te==null) Debug.Log("null");
        //else Debug.Log("not null. "+te.pos);

        //~ #if UNITY_IPHONE || UNITY_ANDROID
        //~ if(Input.touchCount>0){
        //~ foreach(Touch touch in Input.touches){
        //~ if(touch.phase==TouchPhase.Began){
        //~ Gesture.Down(touch.position);
        //~ }
        //~ else if(touch.phase==TouchPhase.Ended){
        //~ Gesture.Up(touch.position);
        //~ }
        //~ else{
        //~ Gesture.On(touch.position);
        //~ }
        //~ }
        //~ }

        //~ if(Input.touchCount==1){
        //~ Touch touch=Input.touches[0];
        //~ if(touch.phase == TouchPhase.Moved){
        //~ if(!dragging) dragging=true;
        //~ DragInfo dragInfo=new DragInfo(0, touch.position, touch.deltaPosition);
        //~ Gesture.Dragging(dragInfo);
        //~ }
        //~ //lastPos=touch.position;
        //~ }
        //~ else{
        //~ if(dragging){
        //~ dragging=false;
        //~ Gesture.DraggingEnd(lastPos);
        //~ }
        //~ }
        //~ #endif


        //~ #if (!UNITY_IPHONE && !UNITY_ANDROID) || UNITY_EDITOR
        //~ if(Input.GetMouseButtonDown(0)){
        //~ Gesture.Down(Input.mousePosition);
        //~ lastPos=Input.mousePosition;
        //~ }
        //~ if(Input.GetMouseButton(0)){
        //~ Gesture.On(Input.mousePosition);

        //~ Vector2 curPos=Input.mousePosition;
        //~ Vector2 delta=curPos-lastPos;

        //~ if(Mathf.Abs((delta).magnitude)>0){
        //~ dragging=true;
        //~ DragInfo dragInfo=new DragInfo(1, curPos, delta);
        //~ Gesture.Dragging(dragInfo);
        //~ }

        //~ lastPos=Input.mousePosition;
        //~ }
        //~ if(Input.GetMouseButtonUp(0)){
        //~ Gesture.Up(Input.mousePosition);

        //~ if(dragging){
        //~ dragging=false;
        //~ Gesture.DraggingEnd(Input.mousePosition);
        //~ }
        //~ }


        //~ if(Input.GetMouseButtonDown(1)){
        //~ Gesture.DownAlt(Input.mousePosition);
        //~ lastPos=Input.mousePosition;
        //~ }
        //~ else if(Input.GetMouseButton(1)){
        //~ Gesture.OnAlt(Input.mousePosition);
        //~ Vector2 curPos=Input.mousePosition;
        //~ Vector2 delta=curPos-lastPos;

        //~ if(Mathf.Abs((delta).magnitude)>0){
        //~ draggingAlt=true;
        //~ DragInfo dragInfo=new DragInfo(2, curPos, delta);
        //~ Gesture.Dragging(dragInfo);
        //~ }

        //~ lastPos=Input.mousePosition;
        //~ }
        //~ else if(Input.GetMouseButtonUp(1)){
        //~ Gesture.Up(Input.mousePosition);

        //~ if(draggingAlt){
        //~ draggingAlt=false;
        //~ Gesture.DraggingEnd(Input.mousePosition);
        //~ }
        //~ }
        //~ #endif
    }