Exemplo n.º 1
0
    override public int InputUpdate()
    {
        if (Input.touchCount > 0)
        {
            for (int i = 0; i < Input.touchCount; i++)
            {
                Touch t = Input.GetTouch(i);

                //stickpos z = 0;
                Vector3 stickPosZ0 = gameObject.transform.position;
                stickPosZ0.z = 0;

                //touch pos.
                Vector3 touchWorldPos = tartegCamera.ScreenToWorldPoint(new Vector3(t.position.x, t.position.y, 0));
                touchWorldPos.z = 0;

                //touch delta pos.
                Vector3 touchdeltaWorldPos = tartegCamera.ScreenToWorldPoint(new Vector3(t.deltaPosition.x, t.deltaPosition.y, 0));
                touchdeltaWorldPos.z = 0;

                //可出現stick的範圍.
                if (isUseStickAppearArea && AppearArea != null)
                {
                    if (AppearArea.OverlapPoint(touchWorldPos) && (t.phase == TouchPhase.Began))
                    {
                        transform.position = new Vector3(touchWorldPos.x, touchWorldPos.y, transform.position.z);
                    }
                }


                //是否點中.
                if (circleC2d.OverlapPoint(touchWorldPos))
                {
                    //是否別人用了.
                    GameVirtualInputBase touchedInput = GameVirtualInput.instance.isTouched(i);
                    //別的 input 用了.
                    if (touchedInput != null)
                    {
                        continue;
                    }
                }
                else
                {
                    continue;
                }

                //暫時記下 touch id;
                touchID = i;

                //Debug.Log("in " + i.ToString() + " " + t.phase.ToString());
                //開始.
                if (t.phase == TouchPhase.Began)
                {
                    circleC2d.radius = oldCircleR * colliderTouchScale;
                    holdTime         = 0;
                    if (onDownEvent != null)
                    {
                        onDownEvent(Vector2.zero);
                    }
                }

                //按住.
                if (t.phase == TouchPhase.Stationary)
                {
                    holdTime += Time.deltaTime;
                }

                //移動.
                if (t.phase == TouchPhase.Moved)
                {
                    //direction.
                    Vector3 directionWorld = touchWorldPos - stickPosZ0;
                    //算出移動多少比率, 半徑.
                    Vector2 directionV2               = new Vector2(directionWorld.x, directionWorld.y);
                    float   directionWorldLeng        = directionV2.magnitude;
                    float   cirRadius                 = oldCircleR * transform.localScale.x;
                    float   directionWorldRadiusRatio = directionWorldLeng / cirRadius;



                    if (moveStick)
                    {
                        //stick 跟著移動.
                        if (directionWorldLeng >= cirRadius * minStickTomovek)
                        {
                            //Debug.Log(sdirvec.magnitude);
                            transform.position += directionWorld * 0.1f;
                        }
                    }


                    //香菇頭.
                    stickHead.transform.position = transform.position + directionWorld.normalized * Math.Min(directionWorldRadiusRatio, 1) * cirRadius;


                    //collider 跟著移動.
                    circleC2d.gameObject.transform.position = new Vector3(touchWorldPos.x, touchWorldPos.y, circleC2d.gameObject.transform.position.z);



                    //debugtext.text = directionWorldRadiusRatio.ToString();

                    if (directionWorldRadiusRatio > minToMove)
                    {
                        if (onMoveEvent != null)
                        {
                            onMoveEvent(directionV2.normalized);
                        }
                    }
                }


                //放開.
                if (t.phase == TouchPhase.Ended || (t.phase == TouchPhase.Canceled))
                {
                    //collider 移回去原位.
                    SetUnTouched();
                    if (onUpEvent != null)
                    {
                        onUpEvent(Vector2.zero);
                    }

                    //長放或短放.
                    if (holdTime >= minLongUpTime)
                    {
                        if (onLongUpEvent != null)
                        {
                            onLongUpEvent(Vector2.zero);
                        }
                    }
                    else
                    {
                        if (onShortUpEvent != null)
                        {
                            onShortUpEvent(Vector2.zero);
                        }
                    }
                }


                //按住事件.
                if (onHoldEvent != null && holdTime > 0)
                {
                    onHoldEvent(new Vector2(holdTime, holdTime));
                }



                //debugtext.text = touchID.ToString();

                break;
            }
        }

        return(touchID);
    }
Exemplo n.º 2
0
    override public int InputUpdate()
    {
        if (Input.touchCount > 0)
        {
            for (int i = 0; i < Input.touchCount; i++)
            {
                Touch t = Input.GetTouch(i);

                //stickpos z = 0;
                Vector3 stickPosZ0 = gameObject.transform.position;
                stickPosZ0.z = 0;

                //touch pos.
                Vector3 touchWorldPos = tartegCamera.ScreenToWorldPoint(new Vector3(t.position.x, t.position.y, 0));
                touchWorldPos.z = 0;

                //touch delta pos.
                Vector3 touchdeltaWorldPos = tartegCamera.ScreenToWorldPoint(new Vector3(t.deltaPosition.x, t.deltaPosition.y, 0));
                touchdeltaWorldPos.z = 0;

                //是否點中.
                if (circleC2d.OverlapPoint(touchWorldPos))
                {
                    //是否別人用了.
                    GameVirtualInputBase touchedInput = GameVirtualInput.instance.isTouched(i);
                    //別的 input 用了.
                    if (touchedInput != null)
                    {
                        continue;
                    }
                }
                else
                {
                    continue;
                }

                //暫時記下 touch id;
                touchID = i;

                //Debug.Log("in " + i.ToString() + " " + t.phase.ToString());
                //開始.
                if (t.phase == TouchPhase.Began)
                {
                    circleC2d.radius = oldCircleR * colliderTouchScale;
                    holdTime         = 0;
                    btnSprite.color  = Color.red;
                    if (onDownEvent != null)
                    {
                        onDownEvent(Vector2.zero);
                    }
                }

                //按住.
                if (t.phase == TouchPhase.Stationary)
                {
                    holdTime += Time.deltaTime;
                }

                //移動.

                if (t.phase == TouchPhase.Moved)
                {
                    //direction.
                    //Vector3 directionWorld = touchWorldPos - stickPosZ0;
                    //算出移動多少比率, 半徑.
                    //Vector2 directionV2 = new Vector2(directionWorld.x, directionWorld.y);
                    //float directionWorldLeng = directionV2.magnitude;
                    //float cirRadius = oldCircleR * transform.localScale.x;
                    //float directionWorldRadiusRatio = directionWorldLeng/cirRadius;

                    //debugtext.text = directionWorldRadiusRatio.ToString();


                    //collider 跟著移動.
                    if (moveCollider)
                    {
                        circleC2d.gameObject.transform.position = new Vector3(touchWorldPos.x, touchWorldPos.y, circleC2d.gameObject.transform.position.z);
                    }
                }


                //放開.
                if (t.phase == TouchPhase.Ended || (t.phase == TouchPhase.Canceled))
                {
                    btnSprite.color = Color.white;
                    if (onUpEvent != null)
                    {
                        onUpEvent(new Vector2(holdTime, holdTime));
                    }

                    //長放或短放.
                    if (holdTime >= minLongUpTime)
                    {
                        Debug.Log("onLongUpEvent" + holdTime.ToString());
                        if (onLongUpEvent != null)
                        {
                            onLongUpEvent(new Vector2(holdTime, holdTime));
                        }
                    }
                    else
                    {
                        Debug.Log("onShortUpEvent" + holdTime.ToString());
                        if (onShortUpEvent != null)
                        {
                            onShortUpEvent(new Vector2(holdTime, holdTime));
                        }
                    }

                    //collider 移回去原位.
                    SetUnTouched();
                }


                //按住事件.
                if (onHoldEvent != null && holdTime > 0)
                {
                    onHoldEvent(new Vector2(holdTime, holdTime));
                }



                //debugtext.text = touchID.ToString();

                break;
            }
        }

        return(touchID);
    }