Exemplo n.º 1
0
    // Update is called once per frame
    void Update()
    {
        //se o personagem está segurando uma poção,
        if (holding)
        {
            GetCanThrow();
            //Debug.Assert(potionRigidbody != null);
            //J: Corrige o erro de ficar impedido de pegar poção nova
            //K: não é melhor setar pra null toda vez que arremessar a poção?
            if (potionRigidbody == null)
            {
                holding = false;
            }
            else
            {
                //seta a posição da poção
                potionRigidbody.transform.position = holdpoint.position;
                potionRigidbody.useGravity         = false;

                if (InputManager.GetKeyDown(playerInput.controllerScheme, "Action1") && canThrow)
                {
                    //arremessa a poção que estava sendo segurada


                    //K: remove contraints de movimento, para arremessar a poção
                    potionRigidbody.constraints = 0;

                    //K: O, eu alterei esta linha abaixo para fazer com que o objeto seja arremessado em várias direções, e não só para direita!
                    Vector3 throwDirection = transform.forward;
                    potionRigidbody.velocity = throwDirection * throwSpeed;
                    potionRigidbody.gameObject.transform.SetParent(null);
                    //K: seta posição da poção, antes dela ser arremessada, para exatamente em cima do player?
                    potionRigidbody.transform.position = new Vector3(this.transform.position.x, potionRigidbody.transform.position.y, this.transform.position.z) + transform.forward.normalized * trigger.bounds.extents.z;
                    //potionRigidbody.useGravity = true;
                    holding = false;

                    //J: altera o valor Thrown da poção para true
                    potionScript.setThrown(true);

                    //K: a propria poção faz isso, quando ela sai do trigger do player
                    //potionRigidbody.gameObject.GetComponent<Collider>().enabled = true;

                    //K: começa uma corrotina improvisada, para só reativar o collider da orbe quando ela já estiver longe o suficiente deste player
                    StartCoroutine(OrbIsOutside(potionRigidbody));

                    //emite som de arremesso de poção
                    if (csd != null && throwerTeam < 4 && csd.CharSelected.Length == 4)
                    {
                        FMODUnity.RuntimeManager.PlayOneShot(throwEventStrings[csd.CharSelected[throwerTeam]]);
                    }
                }

                /*else if(InputManager.GetKeyDown(playerInput.controllerScheme, "Action2") && canThrow)
                 * {
                 *  //joga a poção em si mesmo!
                 *  GameController.potionCount--;
                 *  potionScript.HitPlayer(playerEffects);
                 * }*/

                //J: se longe suficiente da orbe, reativa colisão, para evitar trancar orbes em estado intangivel enquanto não arremessar

                if (numIgnore != 0)
                {
                    for (int i = 0; i < numIgnore; i++)
                    {
                        if (Vector3.Distance(ignorados[i].gameObject.GetComponent <Transform>().position, transform.position) >= 1.25)
                        {
                            Debug.Log("Removido longe");
                            ignorados[i].enabled = true;
                            ignorados[i]         = null;
                            for (int j = i; j < numIgnore; j++)
                            {
                                Debug.Log("Ajustando array");
                                ignorados[j] = ignorados[j + 1];
                            }
                            numIgnore--;
                        }
                    }
                }
            }
        }
        else if (numIgnore != 0 && !holding)
        {
            //reativa colisão com orbe no chão assim que arremessa o que esta carregando
            for (int i = 0; i < numIgnore; i++)
            {
                Debug.Log("Removido arremesso");
                ignorados[i].enabled = true;
                ignorados[i]         = null;
            }
            numIgnore = 0;
        }
    }