Esempio n. 1
0
    private void OnTriggerEnter2D(Collider2D other)
    {
        if (other.CompareTag("RopeNode"))
        {
            if (other.transform.parent.GetComponent <Base>() == actualBase)
            {
                return;
            }
            if (waitingToCollide > 0)
            {
                return;
            }
            Node otherNode = other.GetComponent <Node>();
            if (isHoldingNumber == 999)
            {
                isHoldingNumber = otherNode.number;
            }
            if (isHoldingNumber != otherNode.number)
            {
                return;
            }
            _soundEmmiter.GrapRopeSound();
            zoomCameraOut = true;
            zoomCameraIn  = false;
            _playerAnimations.ChangeToGrap();
            doMortal    = false;
            countMortal = 0;
            SetLerpTrue(other);
            _distanceJoint2D = other.transform.parent.GetComponent <DistanceJoint2D>();
            _distanceJoint2D.connectedBody   = GetComponent <Rigidbody2D>();
            _distanceJoint2D.distance        = (transform.position - _distanceJoint2D.transform.position).magnitude;
            _distanceJoint2D.connectedAnchor = Vector2.zero;

            //holdingRigidBody = other.GetComponent<Rigidbody2D>();

            var baseBase = other.transform.parent.GetComponent <Base>();
            if (isHoldingNumber < baseBase.nodesNumber - 1 && !unchained)
            {
                baseBase.nodes[isHoldingNumber + 1].GetComponent <HingeJoint2D>().enabled = false;
                unchained = true;
            }

            //Fixar o player de alguma outra forma, essa buga a corda;
            //newFixedJoint = other.gameObject.AddComponent<FixedJoint2D>();
            //newFixedJoint.connectedBody = GetComponent<Rigidbody2D>();

            actualBase = other.transform.parent.GetComponent <Base>();
            if (isHoldingNumber != actualBase.nodesNumber - 1)
            {
                hinges = other.GetComponents <HingeJoint2D>();
                var hingeTwo = hinges[1];
                hingeTwo.connectedBody = thisRigidBody;
            }
            else
            {
                var newHinge = other.gameObject.AddComponent <HingeJoint2D>();
                newHinge.autoConfigureConnectedAnchor = false;
                newHinge.connectedBody = thisRigidBody;
                newHinge.anchor       += new Vector2(0, _ropeGenerator.nodeSize / 2);
                var limits = newHinge.limits;
                limits.max               = -baseBase.nodes[isHoldingNumber - 1].GetComponent <HingeJoint2D>().limits.max;
                limits.min               = -baseBase.nodes[isHoldingNumber - 1].GetComponent <HingeJoint2D>().limits.min;
                newHinge.limits          = limits;
                newHinge.connectedAnchor = Vector2.zero;
                newHinge.enableCollision = true;
                holdingLastRope          = true;
            }


            actualBase.nodesNumber = isHoldingNumber;
            for (int i = 0; i < actualBase.nodes.Count - 1; i++)
            {
                if (i > isHoldingNumber)
                {
                    actualBase.nodes.Remove(actualBase.nodes[i]);
                    Destroy(actualBase.nodes[i]);
                }
            }

            spawnedRopes = false;
        }
    }