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); }