Exemplo n.º 1
0
    public void UsarHabilidade(Vector3 posCentral)
    {
        //quais alvos selecionar, dependendo se a habilidade afeta alvos do mesmo time ou do time inimigo
        int               timeAlvo        = habilidadeAtual.seMesmoTime ? this.time : (this.time + 1) % 2;
        List <Vector3>    tilesAlcancados = habilidadeAtual.areaDeEfeito;
        List <Personagem> alvos           = new List <Personagem>();
        GerenciadorScript gs = GameObject.Find("Gerenciador").GetComponent <GerenciadorScript>();
        AttackParent      ap = GameObject.Find("Placeholder").GetComponent <AttackParent>();
        List <Action <GerenciadorDialogo> > list = new List <Action <GerenciadorDialogo> >();

        foreach (Vector3 offset in tilesAlcancados)
        {
            //considerando posCentral como centro, tenta ver se encontra um alvo possível em todos os offsets
            //da área de efeito da habilidade
            Personagem alvoPossivel = gs.ObjetoNoTile(posCentral + offset);
            if (alvoPossivel == null)
            {
                continue;
            }
            else if (alvoPossivel.time == timeAlvo)
            {
                list.Add(gd => {
                    gd.IrPara(posCentral + offset);
                });
                list.Add(gd => {
                    ap.Abrir();
                    ap.SetLeftAnimator(Defines.animacoesAtk[this.nome]);
                    ap.SetRightAnimator(Defines.animacoesAtk[alvoPossivel.nome]);
                });
                list.Add(gd => {
                    habilidadeAtual.efeitoUso(this, alvoPossivel);
                });
                list.Add(gd => {
                    ap.Fechar();
                });
            }
        }
        gs.mensagensPendentes.Add(list);
    }