// Retoma o comando do boss ao mesmo
    IEnumerator RefreshBoss(FirstBossManager manager, float timeToStop)
    {
        float timer = timeToStop;

        while (timer > 0)
        {
            timer -= Time.deltaTime;
            yield return(null);
        }
        if (alive)
        {
            manager.SetMovement(true);
            manager.SetAttack(true);
            normalCollider.enabled = true;
            Destroy(stunnedCollider);
        }
    }
 // Essa funcao e chamada a cada frame
 void Update()
 {
     // Se perdeu a referencia ao jogador, quer dizer que ele morreu
     if (player == null)
     {
         return;
     }
     // Se o boss pode atacar...
     if (canAttack)
     {
         // Se o numero de ataques para dar um forte for -1 (ou seja, o boss já deu o ataque forte), tira-se um numero aleatorio entre 2 e 5 para ser o numero de ataques leves ate o proximo ataque pesado do boss
         if (attacksBeforeHeavy == -1)
         {
             attacksBeforeHeavy = Random.Range(2, 6); // o segundo parametro do Random.Range e exclusivo, entao ele esta pegando numeros inteiros pertencentes ao conjunto [2, 6[.
         }
         if (attacksBeforeHeavy > 0)                  // Ele vai tentar dar um ataque leve
         {
             if (curAttackDelay[0] <= 0)              // Se o boss pode dar o ataque leve de novo...
             // Gravo o vetor que liga o boss com o jogador
             {
                 Vector3 playerRng = player.position - normalCollider.transform.position;
                 // Decido a posicao do ataque dele
                 Vector3 attackPos = DecideAttackPos(0);
                 // E gravo o vetor que liga o boss com a posicao de ataque dele
                 Vector3 attackRng = GetAttackVector(attackPos, 0);
                 // Se o jogador estiver dentro do range de ataque do boss
                 if (playerRng.sqrMagnitude <= attackRng.sqrMagnitude * 1.2f || (playerRng - attackRng).sqrMagnitude <= (attackRange[0] * attackRange[0]))
                 {
                     // Avisa o Animator que o boss atacou
                     animator.SetTrigger("LightAttack");
                     // Comeca a corotina do ataque
                     StartCoroutine(LightAttack(attackRng, attackPos));
                     // Comeca a contar o delay de ataque
                     curAttackDelay[0] = attackDelay[0];
                     hasAttacked       = true;
                     manager.SetMovement(false);
                     manager.SetAttack(false);
                     // Comeca a corotina para devolver o movimento ao boss depois do tempo ter passado
                     StartCoroutine(RefreshBoss(manager, 0.7f));
                 }
             }
         }
         else                                                      // Ele vai tentar dar o ataque pesado, que depois ira o atordoar
         {
             if (curAttackDelay[0] <= 0 && curAttackDelay[1] <= 0) // Se o boss pode dar um ataque de novo...
             // Gravo o vetor que liga o boss com o jogador
             {
                 Vector3 playerRng = player.position - normalCollider.transform.position;
                 // Decido a posicao do ataque dele
                 Vector3 attackPos = DecideAttackPos(1);
                 // E o vetor que liga o boss com a posicao de ataque dele
                 Vector3 attackRng = GetAttackVector(attackPos, 1);
                 // Se o jogador estiver dentro do range do ataque do boss
                 if (playerRng.sqrMagnitude <= attackRng.sqrMagnitude || (playerRng - attackRng).sqrMagnitude <= (attackRange[1] * attackRange[1]))
                 {
                     // Avisa o Animator que o boss atacou
                     animator.SetTrigger("HeavyAttack");
                     // Comeca a corotina do ataque
                     StartCoroutine(HeavyAttack(attackRng, attackPos));
                     // Comeca a contar o delay de ataque
                     curAttackDelay[1] = attackDelay[1];
                     hasAttacked       = true;
                     manager.SetMovement(false);
                     manager.SetAttack(false);
                     // Comeca a corotina para devolver o movimento ao boss depois do tempo ter passado
                     StartCoroutine(RefreshBoss(manager, attackDelay[1]));
                 }
             }
         }
         // Se ele atacou, descresce-se o numero de ataques restantes para o proximo ataque pesado
         if (hasAttacked)
         {
             attacksBeforeHeavy--;
         }
         // Decresce o tempo de espera para que o boss possa dar o ataque leve de novo
         curAttackDelay[0] -= Time.deltaTime;
     }
     // Decresce o tempo de espera para que o boss possa dar o ataque pesado de novo
     curAttackDelay[1] -= Time.deltaTime;
     // Prepara para a proxima chamada
     hasAttacked = false;
 }