void Update() { atributosPlayer.setFase(gerenteFase.getFase()); atributosAdversario.setFase(gerenteFase.getFase()); //for(int i=0;i<nomeAcoes.Length;i++) //{ // nomeAcoes[i].GetComponent<TooltipObserver>().associaAcao(atributosPlayer.getAcao(i)); //} vidaPlayerTexto.text = "" + (int)(atributosPlayer.getVidaAtual()); vidaAdversarioTexto.text = "" + (int)(atributosAdversario.getVidaAtual()); VidaPlayer.value = Mathf.Lerp(VidaPlayer.value, atributosPlayer.getVidaAtual(), velocidadeVida * Time.deltaTime); VidaAdversario.value = Mathf.Lerp(VidaAdversario.value, atributosAdversario.getVidaAtual(), velocidadeVida * Time.deltaTime); barraArgumentoPlayer.value = Mathf.Lerp(barraArgumentoPlayer.value, atributosPlayer.getArgumentos(), velocidadeVida * Time.deltaTime); barraArgumentoAdversario.value = Mathf.Lerp(barraArgumentoAdversario.value, atributosAdversario.getArgumentos(), velocidadeVida * Time.deltaTime); sliderAlinhamento.value = (int)alinhamentoPlayer; //CorAtual= Adversario.transform.GetChild(0).GetComponent<SpriteRenderer>().color; }
private void aplicaDano(CombateAtributos atributosAtacante, CombateAcao golpe, CombateAtributos atributosAlvo) { int ataque = atributosAtacante.atributos.dano; float multiplicadorGolpe = golpe.dano / 100; int danoResultante; if (golpe.tipo != CombateAcao.tipoDano.Neutro) { //A: ajusta multiplicador conforme tipo if (atributosAlvo.isVulneravel((int)golpe.tipo)) { multiplicadorGolpe *= multiplicadorEfetivo + (float)bonusAlinhamento(golpe); //A: texto de feedback efetividade.color = Color.green; efetividade.text = "super efetivo!"; } else if (atributosAlvo.isResistente((int)golpe.tipo)) { multiplicadorGolpe = multiplicadorGolpe * multiplicadorResistente; //A: texto de feedback efetividade.color = Color.red; efetividade.text = "pouco efetivo..."; } } //A: implementacao da postura Defensivo Fortifica, aumentando o dano if (atributosAlvo.atributos.postura == CombateUnidade.posturaUnidade.defensivoFortalece) { multiplicadorGolpe *= multiplicadorFortalecimento; atributosAdversario.setAuxiliar(0); } danoResultante = (int)((ataque + danoBonusArgumento(atributosAtacante)) * multiplicadorGolpe - (atributosAlvo.atributos.defesa + defesaBonusArgumento(atributosAlvo))); //EnemyBattle.SetTrigger("GetHit"); atacAudio.Play(); if (atributosAtacante == atributosPlayer) { EnemyBattle.SetTrigger("GetHit"); BrunoBattle.SetTrigger("Porrada"); } else { PlayerBattle.SetTrigger("Dano"); } //A: implementação da postura Reage a Agressivo if (atributosAlvo.atributos.postura == CombateUnidade.posturaUnidade.reageAgressivo && golpe.tipo == CombateAcao.tipoDano.Agressivo) { aplicaDano(atributosAlvo, atributosAlvo.getAcao(0), atributosAtacante); } //A: implementação da postura Defensivo Fortalece, salva dano levado if (atributosAlvo.atributos.postura == CombateUnidade.posturaUnidade.defensivoFortalece && golpe.tipo == CombateAcao.tipoDano.Manipulador) { atributosAdversario.setAuxiliar(atributosAdversario.getAuxiliar() + 1); } //A: Garante dano minimo = 1 if (danoResultante < 1) { danoResultante = 1; } //A: implementação da postura ignoraManipulador if (atributosAlvo.atributos.postura == CombateUnidade.posturaUnidade.ignoraManipulador && golpe.tipo == CombateAcao.tipoDano.Manipulador) { danoResultante = 0; efetividade.color = Color.blue; efetividade.text = "imune"; } //A: implementação de argumentos de roubo de vida e evasão for (int i = 0; i < argumentosPlayer.Length; i++) { if (argumentosPlayer[i] != null) { if (argumentosPlayer[i].habilidade == CombateArgumento.tipoArgumento.RoubaVida && atributosAtacante == atributosPlayer) { atributosPlayer.curar((int)argumentosPlayer[i].valor * danoResultante); } else if (argumentosPlayer[i].habilidade == CombateArgumento.tipoArgumento.Evasao && atributosAlvo == atributosPlayer) { danoResultante = 0; argumentosPlayer[i].valor--; if (argumentosPlayer[i].valor < 1) { quadroArgumentoAdversario[i].GetComponent <QuadroDeArgumento>().LimpaArgumento(); } } } } for (int i = 0; i < argumentosAdversario.Length; i++) { if (argumentosAdversario[i] != null) { if (argumentosAdversario[i].habilidade == CombateArgumento.tipoArgumento.RoubaVida && atributosAtacante == atributosAdversario) { atributosAdversario.curar((int)argumentosAdversario[i].valor * danoResultante); } else if (argumentosAdversario[i].habilidade == CombateArgumento.tipoArgumento.Evasao && atributosAlvo == atributosAdversario) { danoResultante = 0; efetividade.color = Color.blue; efetividade.text = "imune"; argumentosAdversario[i].valor--; if (argumentosAdversario[i].valor < 1) { quadroArgumentoAdversario[i].GetComponent <QuadroDeArgumento>().LimpaArgumento(); } } } } atributosAlvo.danifica(danoResultante); //A: ajusta multiplicador do alinhamento baseado em ataque escolhido, caso seja vez do player if (atributosAtacante.atributos.nome == atributosPlayer.atributos.nome) { ajustaAlinhamento(golpe); } //A: incrementa contador de vezes que o tipo de ataque foi usado somaTipo(atributosAtacante, golpe); //A: ajusta barra de argumentos de acordo caso nao tiver maximo de argumentos if ((atributosAtacante.atributos.nome == atributosPlayer.atributos.nome && numArgumentosPlayer < argumentosPlayer.Length && turnoAtual == turno.jogador) || (atributosAtacante.atributos.nome == atributosAdversario.atributos.nome && numArgumentosAdversario < argumentosAdversario.Length && turnoAtual == turno.adversario)) { atributosAtacante.setArgumentos(atributosAtacante.getArgumentos() + golpe.barraArgumento); } if (turnoAtual == turno.adversario) { falasAdversario.transform.GetChild(1).GetComponent <Text>().text = golpe.nome[0]; falasAdversario.SetActive(true); } else if (turnoAtual == turno.jogador && atributosAtacante == atributosPlayer) { falasPlayer.transform.GetChild(1).GetComponent <Text>().text = golpe.nome[0]; falasPlayer.SetActive(true); } }