/*private void mudaCor(CombateAtributos atributosAlvo){
     *
     *
     *   if (atributosAlvo.getAtributos().tipo== CombateUnidade.tipoUnidade.Agressivo){
     *      Adversario.transform.GetChild(0).GetComponent<SpriteRenderer>().color=  CorOfensivo.color;
     *
     *  }
     *  else if (atributosAlvo.getAtributos().tipo== CombateUnidade.tipoUnidade.Diplomatico){
     *      Adversario.transform.GetChild(0).GetComponent<SpriteRenderer>().color= CorDiplomatico.color;
     *
     *
     *  }
     *  else  Adversario.transform.GetChild(0).GetComponent<SpriteRenderer>().color= CorManipulador.color;
     *
     *
     *
     * }*/

    //A: ajusta alinhamento conforme ataque escolhido
    private void ajustaAlinhamento(CombateAcao golpe)
    {
        switch (golpe.tipo)
        {
        case CombateAcao.tipoDano.Agressivo:
            if ((int)alinhamentoPlayer > 0)
            {
                IdxAlinhaEsquerda.SetActive(true);
                alinhamentoPlayer--;
            }

            IdxAlinhaAgressivo.SetActive(true);
            break;

        case CombateAcao.tipoDano.Manipulador:

            if ((int)alinhamentoPlayer < 4)
            {
                IdxAlinhaDireita.SetActive(true);
                alinhamentoPlayer++;
            }
            IdxAlinhaManipulador.SetActive(true);
            break;

        case CombateAcao.tipoDano.Diplomatico:
            if ((int)alinhamentoPlayer < 2)
            {
                IdxAlinhaEsqRev.SetActive(true);
                alinhamentoPlayer++;
            }
            else if ((int)alinhamentoPlayer > 2)
            {
                IdxAlinhaDirRev.SetActive(true);
                alinhamentoPlayer--;
            }
            IdxAlinhaDiplomatico.SetActive(true);
            break;

        default:
            return;
        }
    }
    //A: gerencia variaveis relacionadas a passagem de turno
    IEnumerator passaTurno()
    {
        yield return(new WaitForSeconds(entreTurnos / 2));

        //A: gerencia criacao de argumentos de ambos (pois existem posturas com retorno de dano, etc)
        if (atributosAdversario.getArgumentos() >= atributosAdversario.atributos.barraArgumento)
        {
            atributosAdversario.setArgumentos(0);
            criaArgumento(atributosAdversario);
            //A: codigo para criar argumento para adversario vai aqui;
        }
        if (atributosPlayer.getArgumentos() >= atributosPlayer.atributos.barraArgumento)
        {
            atributosPlayer.setArgumentos(0);
            criaArgumento(atributosPlayer);
            //A: codigo para criar argumento para jogador vai aqui;
        }

        //A: ajusta indices do alinhamento
        IdxAlinhaAgressivo.SetActive(false);
        IdxAlinhaDiplomatico.SetActive(false);
        IdxAlinhaDireita.SetActive(false);
        IdxAlinhaEsquerda.SetActive(false);
        IdxAlinhaManipulador.SetActive(false);
        IdxAlinhaDirRev.SetActive(false);
        IdxAlinhaEsqRev.SetActive(false);

        //A: esconde fala e exibe resposta
        if (turnoAtual == turno.adversario)
        {
            falasAdversario.SetActive(false);
            if (resposta != "")
            {
                falasPlayer.transform.GetChild(1).GetComponent <Text>().text = resposta;
                falasPlayer.SetActive(true);
            }
        }
        else
        {
            falasPlayer.SetActive(false);

            if (resposta != "")
            {
                falasAdversario.transform.GetChild(1).GetComponent <Text>().text = resposta;
                falasAdversario.SetActive(true);
            }
        }

        yield return(new WaitForSeconds(entreTurnos / 2));

        falasAdversario.SetActive(false);
        falasPlayer.SetActive(false);

        for (int i = 0; i < argumentosPlayer.Length; i++)
        {
            if (argumentosPlayer[i] != null)
            {
                turnoArgumentosPlayer[i]++;

                if (vidaArgumentosPlayer[i] <= 0 || turnoArgumentosPlayer[i] / 2 >= argumentosPlayer[i].duracao)
                {
                    argumentosPlayer[i] = null;
                    quadroArgumentoPlayer[i].GetComponent <QuadroDeArgumento>().LimpaArgumento();
                    numArgumentosPlayer--;
                }
                else
                {
                    if (argumentosPlayer[i].habilidade == CombateArgumento.tipoArgumento.Regenerar && turnoAtual == turno.jogador)
                    {
                        atributosPlayer.curar((int)argumentosPlayer[i].valor);
                    }
                }
            }
        }
        for (int i = 0; i < argumentosAdversario.Length; i++)
        {
            if (argumentosAdversario[i] != null)
            {
                turnoArgumentosAdversario[i]++;

                if (vidaArgumentosAdversario[i] <= 0 || turnoArgumentosAdversario[i] / 2 >= argumentosAdversario[i].duracao)
                {
                    argumentosAdversario[i] = null;
                    quadroArgumentoAdversario[i].GetComponent <QuadroDeArgumento>().LimpaArgumento();
                    numArgumentosAdversario--;
                }
                else
                {
                    if (argumentosAdversario[i].habilidade == CombateArgumento.tipoArgumento.Regenerar && turnoAtual == turno.adversario)
                    {
                        atributosAdversario.curar((int)argumentosAdversario[i].valor);
                    }
                }
            }
        }

        yield return(new WaitForSeconds(entreTurnos / 7));

        resposta = "";
        //A: Verifica se combate acabou
        efetividade.text = "";

        if (atributosPlayer.getVidaAtual() == 0)
        {
            LevelManagerObject.derrota = true;
            endBattle(LevelManagerObject.derrota);
        }
        else if (atributosAdversario.getVidaAtual() == 0)
        {
            LevelManagerObject.derrota = false;
            endBattle(LevelManagerObject.derrota);
        }
        //A: Se nao acabou, passa vez
        else
        {
            if (turnoAtual == turno.adversario)
            {
                turnoAtual = turno.jogador;
                atributosPlayer.Shuffle();
                for (int i = 0; i < nomeAcoes.Length; i++)
                {
                    //escolhe nome aleatorio entre os descritos no array
                    nomeAcoes[i].text = atributosPlayer.getAcao(i).nome[0];
                    //nomeAcoes[i].GetComponent<TooltipObserver>().associaAcao(atributosPlayer.getAcao(i));
                }
                vezDoOutro.SetActive(false);
            }
            else
            {
                turnoAtual = turno.adversario;
                turnoAdversario();
            }
        }
    }
    void Start()
    {
        LevelManagerObject  = FindObjectOfType <SceneControl>();
        atributosPlayer     = Player.GetComponent <CombateAtributos>();
        atributosAdversario = Adversario.GetComponent <CombateAtributos>();
        gerenteFase         = Adversario.GetComponent <ModificadorAtributos>();

        //A: inicializa alinhamento no centro
        alinhamentoPlayer = alinhamento.diplomatico;
        efetividade.text  = "";

        //A: aloca numero maximo de argumentos igual a numero de quadros de exibicao
        argumentosPlayer          = new CombateArgumento[quadroArgumentoPlayer.Length];
        argumentosAdversario      = new CombateArgumento[quadroArgumentoAdversario.Length];
        vidaArgumentosPlayer      = new int[quadroArgumentoPlayer.Length];
        vidaArgumentosAdversario  = new int[quadroArgumentoAdversario.Length];
        turnoArgumentosPlayer     = new int[quadroArgumentoPlayer.Length];
        turnoArgumentosAdversario = new int[quadroArgumentoAdversario.Length];

        for (int i = 0; i < argumentosPlayer.Length; i++)
        {
            argumentosPlayer[i]      = null;
            vidaArgumentosPlayer[i]  = 0;
            turnoArgumentosPlayer[i] = 9999;
        }
        for (int i = 0; i < argumentosAdversario.Length; i++)
        {
            argumentosAdversario[i]      = null;
            vidaArgumentosAdversario[i]  = 0;
            turnoArgumentosAdversario[i] = 9999;
        }

        atributosPlayer.Shuffle();
        //A: Cada ação do jogador substitui o nome escrito em um dos botoes.
        for (int i = 0; i < nomeAcoes.Length; i++)
        {
            //escolhe nome aleatorio entre os descritos no array
            nomeAcoes[i].text = atributosPlayer.getAcao(i).nome[0];
            //nomeAcoes[i].GetComponent<TooltipObserver>().associaAcao(atributosPlayer.getAcao(i));

            //A: Antigo
            //nomeAcoes[i].text = atributosPlayer.getAcao(i).nome[Random.Range(0,atributosPlayer.getAcao(i).nome.Length)];
            //nomeAcoes[i].GetComponent<TooltipObserver>().associaAcao(atributosPlayer.getAcao(i));
        }
        VidaPlayer.maxValue      = atributosPlayer.atributos.vida;
        VidaAdversario.maxValue  = atributosAdversario.atributos.vida;
        vidaPlayerTexto.text     = "" + VidaPlayer;
        vidaAdversarioTexto.text = "" + VidaAdversario;
        //A: Decide de quem sera o primeiro turno
        if (atributosAdversario.getAtributos().iniciativa > atributosPlayer.getAtributos().iniciativa)
        {
            turnoAtual = turno.adversario;
            vezDoOutro.SetActive(true);
            turnoAdversario();
        }
        else
        {
            turnoAtual = turno.jogador;
            vezDoOutro.SetActive(false);
        }
        //A: garante que nenhuma seta aparece inicialmente no alinhamento
        IdxAlinhaAgressivo.SetActive(false);
        IdxAlinhaDiplomatico.SetActive(false);
        IdxAlinhaDireita.SetActive(false);
        IdxAlinhaEsquerda.SetActive(false);
        IdxAlinhaManipulador.SetActive(false);
        IdxAlinhaDirRev.SetActive(false);
        IdxAlinhaEsqRev.SetActive(false);
    }