Exemple #1
0
    // Update is called once per frame
    void FixedUpdate()
    {
        if (Input.GetAxis("Horizontal") != 0)
        {
            grounded = jumpTrigger.getGrounded();

            var rot = Input.GetAxis("Horizontal") * Time.deltaTime;
            if (grounded)
            {
                rot *= rotSpeed;
                transform.RotateAround(worm.position, Vector3.up, -rot);
            }
            else
            {
                rot *= airRotSpeed;
                transform.RotateAround(worm.position, Vector3.up, -rot);
            }
        }
    }
    // Update is called once per frame
    void Update()
    {
        grounded = jumpTrigger.getGrounded();
        if (grounded)
        {
            canGrapple = true;
        }
        rb.maxAngularVelocity = maxAngVel;
        if (rb.velocity.magnitude > maxSpeed)
        {
            rb.velocity = rb.velocity.normalized * maxSpeed;
        }

        //To make sure the worm stays on the axis.
        rb.angularVelocity = new Vector3(rb.angularVelocity.x, 0, 0);
        if (transform.position.x != 0)
        {
            float xDis = transform.position.x;
            transform.position = Vector3.Scale(transform.position, new Vector3(0, 1, 1));
            foreach (OuterWilds n in FindObjectsOfType <OuterWilds>())
            {
                GameObject obj = n.gameObject;
                obj.transform.position = new Vector3(obj.transform.position.x - xDis, obj.transform.position.y, obj.transform.position.z);
            }
        }
        transform.eulerAngles = new Vector3(transform.eulerAngles.x,
                                            Mathf.Round(transform.eulerAngles.y / 180) * 180,
                                            Mathf.Round(transform.eulerAngles.z / 180) * 180);

        if (Input.GetKeyDown(KeyCode.Space))
        {
            transform.localScale = Vector3.Scale(initialScale, new Vector3(1, 0.75f, 1));
            transform.position   = transform.position - transform.up * 0.75f;
            crouching            = true;
        }


        //Grapple
        RaycastHit hit;
        Vector3    hitPoint     = Vector3.zero;
        Vector3    buttPosition = transform.position + transform.TransformDirection(Vector3.down) * transform.localScale.y;

        if (Input.GetMouseButtonDown(0) && grappleHit.activeSelf && canGrapple)
        {
            canGrapple = false;
            if (Vector3.Distance(buttPosition, grappleHit.transform.position) < (minRopeLength + ropeSpacing) * numSegments)
            {
                float numRopes = Vector3.Distance(buttPosition, grappleHit.transform.position) / minRopeLength;
                createRope(numRopes, Vector3.Distance(buttPosition, grappleHit.transform.position), 0.05f);
            }
            else
            {
                createRope(numSegments, Vector3.Distance(buttPosition, grappleHit.transform.position), 0.05f);
            }
        }
        else if (Input.GetMouseButtonUp(0))
        {
            destroyRope();
        }

        if (!Input.GetMouseButton(0))
        {
            //hinge.connectedBody = null;
            if (Physics.Raycast(buttPosition, transform.TransformDirection(Vector3.down), out hit, range) && canGrapple)
            {
                grappleHit.SetActive(true);
                grappleHit.transform.position = hit.point;
                Debug.DrawRay(buttPosition, transform.TransformDirection(Vector3.down) * range, Color.red);
            }
            else
            {
                grappleHit.SetActive(false);
            }
        }
    }