예제 #1
0
    public void Update(float deltaTime)
    {
        frictionDelta = CameraController.widthInMeters / Screen.width;

        if (UpdateController.platform == UpdateController.Platform.PC)
        {
            float xAxisValue = Input.GetAxis("Horizontal");
            float yAxisValue = Input.GetAxis("Vertical");
            float zAxisValue = Input.GetAxis("Perspective");
            if (xAxisValue * xAxisValue + yAxisValue * yAxisValue > 0)
            {
                CameraController.cameraPosition += new Vector2(xAxisValue, yAxisValue);
            }

            if (zAxisValue != 0)
            {
                CameraController.cameraSize += zAxisValue;
            }

            if (Input.GetMouseButtonDown(0))
            {
                isSliding = true;
                SetTouchesStart();
                cameraPositionStart = Camera.main.transform.position;
                UpdateController.OnButtonDown(Input.mousePosition);
            }

            if (Input.GetMouseButtonUp(0))
            {
                isSliding = false;

                if (Vector2.Distance(firstTouchStart, firstTouch) < 20)
                {
                    UpdateController.OnClick(Input.mousePosition);
                }

                UpdateController.OnButtonUp(Input.mousePosition);
            }
        }
        else
        {
            if (Input.touchCount == 0)
            {
                if (lastTouches >= 1)
                {
                    UpdateController.OnButtonUp(new Vector2(-10007, -10007));
                }

                isSliding = false;
                isZooming = false;
            }


            if (Input.touchCount >= 2)
            {
                if (!isZooming)
                {
                    isSliding = false;
                    isZooming = true;
                    SetTouchesStart();
                    zoomDeltaStart = Vector2.Distance(firstTouchStart, secondTouchStart);
                    mapWidthStart  = CameraController.widthInMeters;
                }
            }

            if (Input.touchCount == 1)
            {
                //UpdateController.OnOver (Input.GetTouch (0).position);

                if (Input.GetTouch(0).phase == TouchPhase.Began)
                {
                    UpdateController.OnButtonDown(Input.GetTouch(0).position);
                }

                if (Input.GetTouch(0).phase == TouchPhase.Ended)
                {
                    UpdateController.OnButtonUp(Input.GetTouch(0).position);

                    if (Vector2.Distance(firstTouchStart, firstTouch) < 7)
                    {
                        UpdateController.OnClick(Input.mousePosition);
                    }
                }


                if (Input.GetTouch(0).phase != TouchPhase.Stationary)
                {
                    if (!isSliding)
                    {
                        isZooming = false;
                        isSliding = true;
                        SetTouchesStart();
                        cameraPositionStart = Camera.main.transform.position;
                    }
                }
            }
        }
        lastTouches = Input.touchCount;
        SetTouches();

        if (mode == Mode.Slide || mode == Mode.SlideAndZoom)
        {
            if (isSliding)
            {
                delta = firstTouchStart - firstTouch;

                if (!SetCameraPositionX(cameraPositionStart.x + delta.x * frictionDelta))
                {
                    /*
                     *              float oldY = firstTouchStart.y;
                     *              SetTouchesStart ();
                     *              firstTouchStart = new Vector2 (firstTouchStart.x, oldY);
                     *
                     *              cameraPositionStart = new Vector3 (Camera.main.transform.position.x, Camera.main.transform.position.y,
                     *                                                 cameraPositionStart.z); */
                }

                if (!SetCameraPositionY(cameraPositionStart.z + delta.y * frictionDelta))
                {
                    /*
                     *  float oldX = firstTouchStart.x;
                     *  SetTouchesStart ();
                     *  firstTouchStart = new Vector2 (oldX, firstTouchStart.y);
                     *
                     *  cameraPositionStart = new Vector3 (cameraPositionStart.x, Camera.main.transform.position.y,
                     *                                     Camera.main.transform.position.z); */
                }
            }
        }

        if (mode == Mode.Zoom || mode == Mode.SlideAndZoom)
        {
            if (isZooming)
            {
                zoomDelta = Vector2.Distance(firstTouch, secondTouch);

                ResizeCamera((1 + (zoomDeltaStart - zoomDelta) * frictionZoom) * mapWidthStart);
            }
        }
    }