public bool isEqual(CombateAcao comparado) { if (this.nome == comparado.nome && this.dano == comparado.dano && this.barraArgumento == comparado.barraArgumento && this.tipo == comparado.tipo) { return(true); } else { return(false); } }
//A: decide a qual contador somar +1 private void somaTipo(CombateAtributos atributosAtacante, CombateAcao golpe) { //A: se jogador foi o atacante if (atributosAtacante.atributos.nome == atributosPlayer.atributos.nome) { switch (golpe.tipo) { case CombateAcao.tipoDano.Agressivo: contaAgressivosPlayer++; break; case CombateAcao.tipoDano.Manipulador: contaManipuladorPlayer++; break; case CombateAcao.tipoDano.Diplomatico: contaDiplomaticoPlayer++; break; default: return; } } else { switch (golpe.tipo) { case CombateAcao.tipoDano.Agressivo: contaAgressivosAdversario++; break; case CombateAcao.tipoDano.Manipulador: contaManipuladorAdversario++; break; case CombateAcao.tipoDano.Diplomatico: contaDiplomaticoAdversario++; break; default: return; } } }
//A: calcula dano bonus baseado no alinhamento private double bonusAlinhamento(CombateAcao golpe) { switch (golpe.tipo) { case CombateAcao.tipoDano.Agressivo: if ((int)alinhamentoPlayer == 0) { return(1); } else if ((int)alinhamentoPlayer == 0) { return(0.5); } else { return(0); } case CombateAcao.tipoDano.Manipulador: if ((int)alinhamentoPlayer == 4) { return(1); } else if ((int)alinhamentoPlayer == 3) { return(0.5); } else { return(0); } case CombateAcao.tipoDano.Diplomatico: if ((int)alinhamentoPlayer == 2) { return(1); } else if ((int)alinhamentoPlayer == 1 || (int)alinhamentoPlayer == 3) { return(0.5); } else { return(0); } default: return(0); } }
public void Shuffle() { for (int i = 0; i < acoes.Length; i++) { int rnd = Random.Range(0, acoes.Length); tempGO = acoes[rnd]; acoes[rnd] = acoes[i]; acoes[i] = tempGO; } for (int i = 0; i < acoes.Length; i++) { acoes[i].ShuffleFalas(); } }
/*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; } }
public void associaAcao(CombateAcao novaAssociada) { acaoAssociada = novaAssociada; }
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); } }