Пример #1
0
    void Update()
    {
        if (RunTimePotion <= Time.time && UsingPotion == true)
        {
            PotionShieldEnd();
            PotionLuckEnd();
            TimePotionEnd();
        }

        if (UsingPotion == true)
        {
            fillValueTest            = Mathf.Clamp(RunTimePotion - Time.time, 0, CurrentPotion.Duration);
            expfillamount.fillAmount = fillValueTest / CurrentPotion.Duration;
        }


        if (Vidas <= 0)
        {
        }



        // Detectando movimento em vector 2D
        Mov = new Vector2(
            Input.GetAxisRaw("Horizontal"),
            Input.GetAxisRaw("Vertical")
            );

        // Estabelecendo as animacoes
        if (Mov != Vector2.zero)
        {
            anim.SetFloat("movX", Mov.x);
            anim.SetFloat("movY", Mov.y);
            anim.SetBool("Walking", true);
        }
        else
        {
            anim.SetBool("Walking", false);
        }


        //Buscamos o estado atual conferindo a informação da animação de ataque no animator.
        AnimatorStateInfo stateInfo = anim.GetCurrentAnimatorStateInfo(0);
        bool attacking = stateInfo.IsName("Arthur_Attack");


        //Detectamos o Ataque do personagem, o ataque têm prioridade e por isto o código é colocado por último.
        if ((Input.GetKeyDown("space") && !attacking) || ((Input.GetKeyDown(KeyCode.Mouse0) && !attacking)))
        { /*		-------> Essa linha apenas permite que o jogador
           *    realize a animação de ataque caso a tecla espaço for pressionada, e além disso, só permite a execução da
           *    animação caso o jogador não esteja com esta animação de ataque sendo executada no exato momento que ele
           *    pressionar a tecla espaço. (Por esse motivo aquela parte "&& !attacking"							  */
            if (sword.Sword_CurrentDamage != 0)
            {
                anim.SetTrigger("Attacking");
                AudioManager.instancia.PlaySFX(AudioManager.instancia.attackClip);
            }
            else
            {
                Hud_Menu HudMenu = GameObject.FindGameObjectWithTag("Area").GetComponent <Hud_Menu>();
                HudMenu.ArmaEquipada();
            }
        }



        // Com isso abaixo nós vamos ficar atualizando a posição X e Y da colisão do ataque do personagem para
        // que ele se ajuste á direção que o jogador está virado no momento atual da jogatina.
        // O colisor do ataque será a região onde o jogador vai causar dano nos objetos e inimigos que estiverem ali.
        if (Mov != Vector2.zero)
        {
            attackCollider.offset = new Vector2(Mov.x / 3, Mov.y / 3);
        }


        /* É aqui que nós vamos ativar o collider quando a animação do ataque estiver sendo executada.
         *              Isso vai fazer uma checagem a cada frame, visto que estamos escrevendo o código dentro da "Void Update".
         *              Em resumo, essa checagem faz com que quando a animação de ataque já tiver começado, o collider do ataque
         *              só fique LIGADO enquanto o tempo de execução da animação for maior que 20% do tempo total dela, e enquanto
         *              o tempo da animação for menor que 70% do tempo total, fazendo com que ANTES de 20% e APÓS 70% do tempo que
         *              a execução da animação levar, o collider fique DESLIGADO.
         *
         *              Isso serve pra justificar o fato do ataque do personagem causar dano nos inimigos, dando mais realismo para
         *              o jogo, visto que se nós permitirmos que o collider fique ativo durante todo o tempo de execução da animação,
         *              o ataque também vai funcionar mesmo nos primeiros e nos últimos frames da animação, mas os primeiros frames
         *              são onde o jogador ainda estará "sacando" a espada pra realizar o ataque e nos últimos frames ele já está com
         *              a espada parada após realizar o corte com a lâmina, então não faz sentido que esse tempo também seja levado em
         *              conta na hora de aplicar o dano nos inimigos e nos objetos.
         *
         *              Isso também impede que o jogador fique dedilhando a tecla espaço fazendo com que a direção que ele esteja
         *              olhando se torne uma área onde o dano seja sempre constante */
        if (attacking)
        {
            float PlaybackTime = stateInfo.normalizedTime;
            if (PlaybackTime > 0.2 && PlaybackTime < 0.7)
            {
                attackCollider.enabled = true;
            }
            else
            {
                attackCollider.enabled = false;
                //    print("nao atacou");
            }
        }
        if (Input.GetKeyDown(KeyCode.R) && magic.MagiaAtual != "")
        {
            //   if (magic.MagiaAtual == "Fogo")
            //   {
            //
            //       cooldown.CoolDownMagia();
            //       print("a");
            //
            //   }
            //   else if (magic.MagiaAtual == "Floresta")
            //   {
            //       cooldown.CoolDownMagia();
            //       print("b");
            //   }

            cooldown.CoolDownMagia(magic.MagiaAtual);
        }
    }