Esempio n. 1
0
    // Update is called once per frame
    void Update()
    {
        if (shotAmmo)
        {
            if (transform.position.y < FloorPlacementController.savePlane.transform.position.y)
            {
                gameManager.DestroyAmmo();
            }
            return;
        }

        if (!TryGetTouchPosition(out Vector2 touchPosition))
        {
            transform.position = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width / 2, Screen.height / 2, Camera.main.nearClipPlane + .2f));
            return;
        }
        if (Input.touchCount > 0 && Input.touches[0].phase == TouchPhase.Began)
        {
            Ray        ray = Camera.main.ScreenPointToRay(touchPosition);
            RaycastHit hitObject;
            if (Physics.Raycast(ray, out hitObject) && gameManager.canGrabAmmo)
            {
                if (hitObject.transform.tag == "Ammo")
                {
                    holdTouch = true;
                }
            }
        }
        if (holdTouch && TouchPhase.Ended == Input.touches[0].phase)
        {
            ShootAmmo();
            holdTouch = false;
        }
        if (holdTouch)
        {
            lineRenderer.enabled = true;
            // as y goes down, z comes closer
            float pullBallOnZAxis = touchPosition.y * (Camera.main.nearClipPlane + .2f) / (Screen.height / 2);
            transform.position = Camera.main.ScreenToWorldPoint(new Vector3(touchPosition.x, touchPosition.y, pullBallOnZAxis));
            ammoOrigin         = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width / 2, Screen.height / 2, Camera.main.nearClipPlane + .2f));
            directionOfForce   = (ammoOrigin - transform.position);
            distance           = Vector3.Distance(ammoOrigin, transform.position);
            predictionManager.Predict(gameObject, transform.position, directionOfForce * (distance * 200f), lineRenderer);
        }
    }