Example #1
0
    // Start is called before the first frame update
    private void Start()
    {
        // Cria a lista
        listaJoints = new List <Transform>();

        // Acha a coisas da Ashley
        ash     = GameObject.FindGameObjectWithTag("Player");
        ashCtrl = ash.GetComponent <ChrCtrl_Pipilson>();
        ashCC   = ash.GetComponent <CharacterController>();
        anim    = ash.transform.GetChild(0).GetComponent <Animator>();
        // Pega o filho desse objeto
        Transform child = transform.GetChild(0);

        // Enquanto o filho não for nulo, ou seja, child tiver outro child...
        while (child != null)
        {
            // Adiciona o componente GrabJoint a ele
            GrabJoint gj = child.gameObject.AddComponent <GrabJoint>();
            // Define o parametro rb como o Rigidbody dele mesmo
            gj.rb = child.gameObject.GetComponent <Rigidbody>();
            gj.rb.centerOfMass  = new Vector3(0, 0, 0);
            gj.rb.inertiaTensor = new Vector3(1, 1, 1);

            // Define o parametro paiDeTodos como essa lista
            gj.paiDeTodos = this;

            // Adiciona ele à lista
            listaJoints.Add(child);
            // E pega o child dele
            child = child.GetChild(0);

            // O loop só vai parar quando child não tiver outro child
            // E vai pegando os filhos de cada um no processo
        }
    }
Example #2
0
    // Start is called before the first frame update
    void Start()
    {
        // Pega o filho desse objeto
        Transform child = transform.GetChild(0);

        // Enquanto o filho não for nulo, ou seja, child tiver outro child...
        for (int i = 0; child.childCount == 1; i++)
        {
            // Adiciona o componente GrabJoint a ele
            GrabJoint gj = child.gameObject.AddComponent <GrabJoint>();
            // Define o parametro rb como o Rigidbody dele mesmo
            gj.rb = child.gameObject.GetComponent <Rigidbody>();
            gj.rb.centerOfMass  = new Vector3(0, 0, 0);
            gj.rb.inertiaTensor = new Vector3(1, 1, 1);

            // Define o som de enganchar
            gj.grabSound = grabSound;

            // Define o parametro paiDeTodos como essa lista
            gj.paiDeTodos = GetComponent <ListaJoints>();

            // Adiciona ele à lista
            listaJoints.Add(gj);
            // E pega o child dele
            child = child.GetChild(0);

            // O loop só vai parar quando child não tiver outro child
            // E vai pegando os filhos de cada um no processo
        }
    }
Example #3
0
    public GrabJoint JointMaisProximo(Transform compare)
    {
        // jointMaisProximo sempre é o que tem a distancia correspondete a distanciaAnterior
        // Coloquei o joint0 só pra não ser nulo
        GrabJoint jointMaisProximo = listaJoints[0];

        // A float distanciaAnterior é a que vai ser comparada com a nova distancia lá embaixo no for
        // Coloquei a distancia do joint0 só pra não ser nulo
        float distanciaAnterior = Vector3.Distance(listaJoints[0].transform.position, compare.position);

        // Pra cada joint na lista...
        for (int i = 0; i < listaJoints.Count; i++)
        {
            // Calcula a distancia entre esse joint e player
            float novaDistancia = Vector3.Distance(listaJoints[i].transform.position, compare.position);

            // Se essa distancia for menor que a anterior
            if (novaDistancia < distanciaAnterior)
            {
                // Define esse joint como o mais próximo até então
                jointMaisProximo = listaJoints[i];
                // E essa distância como a menor até então
                distanciaAnterior = novaDistancia;
            }

            // O processo se repete pra cada joint na lista, de forma que a distancia de todos os joints seja testada
        }

        // Retorna o resultado
        return(jointMaisProximo);
    }
Example #4
0
    // Update is called once per frame
    private void FixedUpdate()
    {
        // Se a corda estiver ativa...
        if (naAtiva)
        {
            // Pega o joint mais próximo de player
            jmp = listaJoints.JointMaisProximo(ash.transform);
            // Pega o Transform do joint mais próximo
            Transform jmpTransform = jmp.transform;
            // Pega o Rigidbody do joint mais próximo
            Rigidbody rbAtual = jmp.rb;

            // Define o joint mais próximo como parent da Ashley
            ash.transform.SetParent(jmpTransform, true);

            #region Movimento
            // Move a Ashley ao longo da corda
            float vertical = Input.GetAxis("LeftVertical") * Time.fixedDeltaTime * velocidadeEscalada;
            // Se estiver indo pra cima...
            if (vertical > 0.01f && ash.transform.position.y < listaJoints.listaJoints[0].transform.position.y)
            {
                // Move na direção do parent do joint mais próximo
                ash.transform.position = Vector3.MoveTowards(ash.transform.position, jmpTransform.parent.position, Mathf.Abs(vertical));
            }
            else if (vertical < -0.01f && ash.transform.position.y > listaJoints.listaJoints[listaJoints.listaJoints.Count - 1].transform.position.y)
            {
                // Move na direção do child do joint mais próximo
                ash.transform.position = Vector3.MoveTowards(ash.transform.position, jmpTransform.GetChild(0).position, Mathf.Abs(vertical));
            }

            // Ativa a animação
            anim.SetFloat("DireCorda", Input.GetAxis("LeftVertical"));

            // Zera a rotação da Ashley
            ash.transform.rotation = Quaternion.Euler(Vector3.zero);

            // Adiciona força de acordo com o eixo horizontal pra fazer a corda se movimentar lateralmente
            float horizontal = Input.GetAxis("LeftHorizontal");
            rbAtual.AddForce(new Vector3(horizontal * forcaBalango, 0, 0));

            range.setVolume(Mathf.Abs(horizontal) * volumeMultiplier);
            #endregion

            if (Input.GetButtonDown("FaceA"))
            {
                Abortar();
            }
        }
        else if (timeLeft >= -1)
        {
            UpdateTimer();
        }
    }