static int QuantidadeMaxima(Rebatedores.Tipo tipo) { switch (tipo) { case Rebatedores.Tipo.Fixo: return(4); case Rebatedores.Tipo.VerticalCimaBaixo: case Rebatedores.Tipo.VerticalBaixoCima: return(2); } return(1); }
static int ModPos(Rebatedores.Tipo tipo) { switch (tipo) { case Rebatedores.Tipo.Fixo: return(6); case Rebatedores.Tipo.DiagonalEsqDir: case Rebatedores.Tipo.DiagonalDirEsq: return(3); } return(2); }
static List <Rebatedor> CriarRebatedoresGrade(int pos, bool f, int dif) { List <Rebatedor> rebs = new List <Rebatedor>(); float chanceDestrutivel = 1 - ((dif - 1f) / Dados.jogoRapidoDificuldadeMaxima); //bool destru = Random.value <= chanceDestrutivel; Rebatedores.Tipo tipo = PegarTipo(f); int m = ModPos(tipo); int qMaxPorDif = dif / 2; int q = QuantidadeMaxima(tipo); q = q <= qMaxPorDif ? q : qMaxPorDif; q = q > 1 ? q : 1; List <int> posicoes = new List <int>(); for (int i = 0; i < m; i++) { posicoes.Add(i); } for (int i = 0; i < q; i++) { Rebatedor reb = new Rebatedor(); reb.destrutivel = Random.value <= chanceDestrutivel; reb.posicaoGrade = pos; reb.tipo = tipo; reb.posicaoLocal = AleatorioLista <int>(posicoes); rebs.Add(reb); } return(rebs); }
// Métodos públicos public void Criar( Rebatedores.Tipo t, bool d, Vector3 p, int posGrade) { tipo = t; destrutivel = d; posInicial = p; posicaoGrade = posGrade; switch (tipo) { case Rebatedores.Tipo.HorizontalEsqDir: limiteNegativo = p.x; limitePositivo = p.x + 2 * Dados.rebatedorDistanciaHorizontal; distancia = limiteNegativo; direcao = 1; velocidade = Dados.rebatedorHorizontalVelocidade; break; case Rebatedores.Tipo.HorizontalDirEsq: limitePositivo = p.x; limiteNegativo = p.x - 2 * Dados.rebatedorDistanciaHorizontal; distancia = limitePositivo; direcao = -1; velocidade = Dados.rebatedorHorizontalVelocidade; break; case Rebatedores.Tipo.VerticalCimaBaixo: limitePositivo = p.y; limiteNegativo = p.y - Dados.rebatedorDistanciaVertical; distancia = limitePositivo; direcao = 1; velocidade = Dados.rebatedorVerticalVelocidade; break; case Rebatedores.Tipo.VerticalBaixoCima: limiteNegativo = p.y; limitePositivo = p.y + Dados.rebatedorDistanciaVertical; distancia = limiteNegativo; direcao = -1; velocidade = Dados.rebatedorVerticalVelocidade; break; case Rebatedores.Tipo.DiagonalDirEsqBaixoCima: limitePositivo = p.x; limiteNegativo = p.x - 2 * Dados.rebatedorDistanciaHorizontal; distancia = limitePositivo; distanciaExtra = p.y; posicaoExtraNegativo = p.y; posicaoExtraPositivo = p.y + Dados.rebatedorDistanciaVertical; direcao = -1; direcaoExtra = 1; velocidade = Dados.rebatedorHorizontalVelocidade; break; case Rebatedores.Tipo.DiagonalDirEsqCimaBaixo: limitePositivo = p.x; limiteNegativo = p.x - 2 * Dados.rebatedorDistanciaHorizontal; distancia = limitePositivo; distanciaExtra = p.y; posicaoExtraPositivo = p.y; posicaoExtraNegativo = p.y - Dados.rebatedorDistanciaVertical; direcao = -1; direcaoExtra = -1; velocidade = Dados.rebatedorHorizontalVelocidade; break; case Rebatedores.Tipo.DiagonalEsqDirBaixoCima: limiteNegativo = p.x; limitePositivo = p.x + 2 * Dados.rebatedorDistanciaHorizontal; distancia = limiteNegativo; distanciaExtra = p.y; posicaoExtraNegativo = p.y; posicaoExtraPositivo = p.y + Dados.rebatedorDistanciaVertical; direcao = 1; direcaoExtra = 1; velocidade = Dados.rebatedorHorizontalVelocidade; break; case Rebatedores.Tipo.DiagonalEsqDirCimaBaixo: limiteNegativo = p.x; limitePositivo = p.x + 2 * Dados.rebatedorDistanciaHorizontal; distancia = limiteNegativo; distanciaExtra = p.y; posicaoExtraPositivo = p.y; posicaoExtraNegativo = p.y - Dados.rebatedorDistanciaVertical; direcao = 1; direcaoExtra = -1; velocidade = Dados.rebatedorHorizontalVelocidade; break; case Rebatedores.Tipo.CircularHorario: direcao = -1; velocidade = Dados.rebatedorAngularVelocidade; break; case Rebatedores.Tipo.CircularAntihorario: direcao = 1; velocidade = Dados.rebatedorAngularVelocidade; break; } }