示例#1
0
        /// <summary>
        /// Garante que o deslocamento tem as propriedades com valores para o cálculo
        /// </summary>
        /// <param name="deslocamento"></param>
        /// <returns></returns>
        private static bool IsDeslocamentoValido(Deslocamento deslocamento)
        {
            if (!deslocamento.CdOcorrenciaInicioPIM.HasValue || !deslocamento.CdOcorrenciaFimPIM.HasValue ||
                deslocamento.LocalizacaoEntregaAntesPIM.Lat == 0 || deslocamento.LocalizacaoEntregaAntesPIM.Lon == 0 ||
                deslocamento.LocalizacaoEntregaDepoisPIM.Lat == 0 || deslocamento.LocalizacaoEntregaDepoisPIM.Lon == 0 ||
                !deslocamento.ValorOdometroEntregaAntesPIM.HasValue || !deslocamento.ValorOdometroEntregaDepoisPIM.HasValue ||
                !deslocamento.ValorOdometroFimPIM.HasValue || !deslocamento.ValorOdometroInicioPIM.HasValue)
            {
                return(false);
            }

            return(true);
        }
示例#2
0
        private static bool IsDeslocamentoValido(Rota rota, Deslocamento deslocamento)
        {
            // Se não houver valor cadastrado para limiar de distância deve-se retornar true para que
            // o indicador de Deslocamentos não influencia na análise
            if (!rota.UnidadeNegocio.VlMaxDistanciaKmDesvioPIM.HasValue &&
                !rota.UnidadeNegocio.VlMaxPorcentagemDesvioPIM.HasValue)
            {
                return(true);
            }

            // Se não houve o deslocamento desse tipo de PIM, então deve-se retornar true para que essa PIM não influencie na análise
            if (NaoHouveDeslocamentoPIM(deslocamento))
            {
                return(true);
            }

            // O deslocamento da PIM não há dados suficientes para efetuar os cálculos.
            // Por isso, a Divergência de KM não será remunerada
            if (!IsDeslocamentoValido(deslocamento))
            {
                return(false);
            }

            double maxDistanciaMetroDesvioPIM = rota.UnidadeNegocio.VlMaxDistanciaKmDesvioPIM.Value * 1000;
            double maxPorcentagemDesvioPIM    = rota.UnidadeNegocio.VlMaxPorcentagemDesvioPIM.Value;

            // Efetuar os cálculos necessário para descobrir o valor de desvio da rota para essa PIM
            double entregaAntesAlmoco  = (deslocamento.ValorOdometroInicioPIM.Value - deslocamento.ValorOdometroEntregaAntesPIM.Value);
            double entregaDepoisAlmoco = (deslocamento.ValorOdometroEntregaDepoisPIM.Value - deslocamento.ValorOdometroFimPIM.Value);

            (double distancia, int tempo) = Coordenada.DistanciaLinhaReta(deslocamento.LocalizacaoEntregaAntesPIM.Lat,
                                                                          deslocamento.LocalizacaoEntregaAntesPIM.Lon,
                                                                          deslocamento.LocalizacaoEntregaDepoisPIM.Lat,
                                                                          deslocamento.LocalizacaoEntregaDepoisPIM.Lon);

            double desvioAlmoco = entregaAntesAlmoco + entregaDepoisAlmoco - distancia;

            // Verifica se o desvio foi menor que a distância máxima parametrizada
            // ou se a porcentagem do desvio com relação a distância entre as entregas foi menor que a porcentagem parametrizada
            return(desvioAlmoco < maxDistanciaMetroDesvioPIM || desvioAlmoco * 100 / distancia < maxPorcentagemDesvioPIM);
        }
示例#3
0
        //Minimo da Espécie * (FatorDex + FatorFor)
        //FatorDex e FatorFor = quantos % acima ou abaixo do minimo da especie o ser está
        private Deslocamento CalculaDesolocamentoSolo(Ser ser)
        {
            Deslocamento resultado      = new Deslocamento("Solo");
            Deslocamento desSoloEspecie = ser.Especies[0].DeslocamentosMedios.FirstOrDefault(d => d.Tipo == "Solo");

            if (desSoloEspecie != null)
            {
                CalculadorNumero calc = new CalculadorNumero();
                int especieDexMin     = ser.Especies[0].DestrezaMin.Pontos;
                int especieForMin     = ser.Especies[0].ForcaMin.Pontos;
                int serDex            = ser.Destreza.Pontos;
                int serFor            = ser.Forca.Pontos;
                //Retorna as porcentagens a mais (ou a menos) que os atributos atuais têm sobre a espécie
                double fatorDex = 10 * serDex / especieDexMin;
                double fatorFor = 10 * serFor / especieForMin;
                //Média dos dois valores para multiplicar com o minimo da espécie
                double fatorTotal = (fatorDex + fatorFor) / 2;
                resultado.Valor = calc.MultiplicaValorMag(desSoloEspecie.Valor, fatorTotal);
            }

            return(resultado);
        }
示例#4
0
        public Especie Gerar(Random rnd)
        {
            GeradorOrigem       genOrigem       = new GeradorOrigem();
            GeradorCriatividade genCriatividade = new GeradorCriatividade();
            GeradorDestreza     genDestreza     = new GeradorDestreza();
            GeradorExistencia   genExistencia   = new GeradorExistencia();
            GeradorForca        genForca        = new GeradorForca();
            GeradorIdeia        genIdeia        = new GeradorIdeia();
            GeradorIntelecto    genIntelecto    = new GeradorIntelecto();
            GeradorMateria      genMateria      = new GeradorMateria();
            GeradorModificador  genModificador  = new GeradorModificador();
            GeradorValorMag     genValorMag     = new GeradorValorMag();
            GeradorEnergia      genEnergia      = new GeradorEnergia();
            GeradorPericia      genPericia      = new GeradorPericia();
            GeradorHabilidade   genHabilidade   = new GeradorHabilidade();
            GeradorNatureza     genNatureza     = new GeradorNatureza();
            GeradorResposta     genResposta     = new GeradorResposta();
            GeradorBoolean      genBool         = new GeradorBoolean();
            CalculadorSer       calculadorSer   = new CalculadorSer();
            CalculadorNumero    calculadorNum   = new CalculadorNumero();


            Especie especie = new Especie()
            {
                ReinoTaxo          = rsg.GerarTamanhoEspecifico(2, 8, rnd),
                FiloTaxo           = rsg.GerarTamanhoEspecifico(2, 9, rnd),
                ClasseTaxo         = rsg.GerarTamanhoEspecifico(2, 8, rnd),
                OrdemTaxo          = rsg.GerarTamanhoEspecifico(2, 8, rnd),
                FamiliaTaxo        = rsg.GerarTamanhoEspecifico(2, 8, rnd),
                GeneroTaxo         = rsg.GerarTamanhoEspecifico(2, 8, rnd),
                NomeCientifico     = rsg.GerarTamanhoEspecifico(2, 8, rnd),
                NomePopular        = rsg.GerarTamanhoEspecifico(2, 8, rnd),
                OrigemEspecie      = genOrigem.Gerar(rnd),
                MagnitudeMin       = rng.GerarEntre(0, 5, rnd),
                MagnitudeMax       = rng.GerarEntre(0, 5, rnd),
                ReiMin             = rng.GerarEntre(0, 3, rnd),
                ReiMax             = rng.GerarEntre(1, 10, rnd),
                KiMin              = rng.GerarEntre(0, 50, rnd),
                KiMax              = rng.GerarEntre(1, 1000, rnd),
                NivelMin           = rng.GerarEntre(0, 10000, rnd),
                NivelMax           = rng.GerarEntre(1, 100000, rnd),
                TempoMax           = rng.GerarEntre(1, 10000, rnd),
                Energias           = genEnergia.GerarLista(rng.GerarEntre(1, 5, rnd), rnd),
                ForcaMin           = genForca.Gerar(rnd),
                ForcaMax           = genForca.Gerar(rnd),
                MateriaMin         = genMateria.Gerar(rnd),
                MateriaMax         = genMateria.Gerar(rnd),
                DestrezaMin        = genDestreza.Gerar(rnd),
                DestrezaMax        = genDestreza.Gerar(rnd),
                IntelectoMin       = genIntelecto.Gerar(rnd),
                IntelectoMax       = genIntelecto.Gerar(rnd),
                CriatividadeMin    = genCriatividade.Gerar(rnd),
                CriatividadeMax    = genCriatividade.Gerar(rnd),
                ExistenciaMin      = genExistencia.Gerar(rnd),
                ExistenciaMax      = genExistencia.Gerar(rnd),
                IdeiaMin           = genIdeia.Gerar(rnd),
                IdeiaMax           = genIdeia.Gerar(rnd),
                PericiasEspecie    = genPericia.GerarLista(rng.GerarEntre(1, 10, rnd), rnd),
                HabilidadesEspecie = genHabilidade.GerarLista(rng.GerarEntre(1, 3, rnd), rnd),
                OrigemPoder        = rsg.GerarTamanhoEspecifico(4, 10, rnd),
                VirtudesEspecie    = genModificador.GerarListaComOrigem("Virtudes", 0, rng.GerarEntre(1, 10, rnd), rnd, '+'),
                DefeitosEspecie    = genModificador.GerarListaComOrigem("Defeitos", 0, rng.GerarEntre(1, 10, rnd), rnd, '-'),
                ForcaVontadeMin    = genValorMag.GerarEntre(new ValorMag(1, 0), new ValorMag(99, 15), rnd),
                ForcaVontadeMax    = genValorMag.GerarEntre(new ValorMag(1, 0), new ValorMag(99, 15), rnd),
                IraMin             = genValorMag.GerarEntre(new ValorMag(1, 0), new ValorMag(99, 15), rnd),
                IraMax             = genValorMag.GerarEntre(new ValorMag(1, 0), new ValorMag(99, 15), rnd),
                PoderMaximoMin     = genValorMag.GerarEntre(new ValorMag(1, 0), new ValorMag(99, 15), rnd),
                PoderMaximoMax     = genValorMag.GerarEntre(new ValorMag(1, 0), new ValorMag(99, 15), rnd),
                FatorProgressao    = rng.GerarEntre(1, 10, rnd),
                CansacoMax         = rng.GerarEntre(0, 1000, rnd),
                FeMin              = rng.GerarEntre(0, 1000, rnd),
                FeMax              = rng.GerarEntre(0, 1000, rnd),
                KarmaMin           = rng.GerarEntre(0, 1000, rnd),
                KarmaMax           = rng.GerarEntre(0, 1000, rnd),
                MaxItensEquipados  = rng.GerarEntre(1, 10, rnd),
                AcaoMin            = rng.GerarEntre(1, 1000, rnd),
                AcaoMax            = rng.GerarEntre(0, 1000, rnd),
                AlturaMin          = genValorMag.GerarEntre(new ValorMag(1, 0), new ValorMag(99, 5), rnd),
                AlturaMax          = genValorMag.GerarEntre(new ValorMag(1, 0), new ValorMag(99, 5), rnd),
                Id = rng.GerarEntre(1, 1000, rnd),
                MaxArmasEquipadas = rng.GerarEntre(1, 10, rnd),
                //TODO: Subclassificacoes = GeraSubclassificacoes(),
                TurnoMin      = rng.GerarEntre(1, 1000, rnd),
                TurnoMax      = rng.GerarEntre(1, 1000, rnd),
                MaturidadeMin = 0,
                MaturidadeMax = 0,
                DestriaMax    = rng.GerarEntre(1, 10, rnd),
                DestriaMin    = 1,
                Porcentagem   = 0,
                TrabalhoMin   = rng.GerarEntre(0, 1000, rnd),
                Densidade     = genValorMag.GerarEntre(new ValorMag(1, 0), new ValorMag(99, 15), rnd),
                LarguraMin    = genValorMag.GerarEntre(new ValorMag(1, 0), new ValorMag(99, 5), rnd),
                LarguraMax    = genValorMag.GerarEntre(new ValorMag(1, 0), new ValorMag(99, 5), rnd),
                Especial      = rng.GerarEntre(1, 70, rnd),
                Natureza      = genNatureza.Gerar(rnd),
                RespostaMin   = genResposta.Gerar(rnd),
            };

            especie.MagnitudeMax    = especie.MagnitudeMin + especie.MagnitudeMax;
            especie.ReiMax          = especie.ReiMin + especie.ReiMax;
            especie.KiMax           = especie.KiMin + especie.KiMax;
            especie.ForcaVontadeMax = calculadorNum.SomaValorMag(especie.ForcaVontadeMin, especie.ForcaVontadeMax);
            especie.IraMax          = calculadorNum.SomaValorMag(especie.IraMin, especie.IraMax);
            especie.PoderMaximoMax  = calculadorNum.SomaValorMag(especie.PoderMaximoMin, especie.PoderMaximoMax);
            especie.FeMax           = especie.FeMin + especie.FeMax;
            especie.KarmaMax        = especie.KarmaMin + especie.KarmaMax;
            especie.AcaoMax         = especie.AcaoMin + especie.AcaoMax;
            especie.AlturaMax       = calculadorNum.SomaValorMag(especie.AlturaMin, especie.AlturaMax);
            especie.TurnoMax        = especie.TurnoMin + especie.TurnoMax;
            especie.MaturidadeMin   = (int)calculadorNum.CalculaPorcentagem(rng.GerarEntre(1, 30, rnd), especie.TempoMax);
            especie.MaturidadeMax   = especie.MaturidadeMin + (int)calculadorNum.CalculaPorcentagem(rng.GerarEntre(60, 99, rnd), especie.TempoMax);
            especie.TrabalhoMax     = especie.TrabalhoMin + rng.GerarEntre(0, 1000, rnd);
            especie.LarguraMax      = calculadorNum.SomaValorMag(especie.LarguraMin, especie.LarguraMax);

            especie.DeslocamentosMedios = new List <Deslocamento>()
            {
            };

            if (genBool.GeraComChance(90, rnd))
            {
                especie.DeslocamentosMedios.Add(new Deslocamento()
                {
                    Tipo  = "Solo",
                    Valor = genValorMag.GerarEntre(new ValorMag(1, 0), new ValorMag(99, 15), rnd)
                });
            }

            if (genBool.GeraComChance(70, rnd))
            {
                especie.DeslocamentosMedios.Add(new Deslocamento()
                {
                    Tipo  = "Mar",
                    Valor = genValorMag.GerarEntre(new ValorMag(1, 0), new ValorMag(99, 15), rnd)
                });
            }

            if (genBool.GeraComChance(40, rnd))
            {
                especie.DeslocamentosMedios.Add(new Deslocamento()
                {
                    Tipo  = "Ar",
                    Valor = genValorMag.GerarEntre(new ValorMag(1, 0), new ValorMag(99, 15), rnd)
                });
            }

            if (genBool.GeraComChance(10, rnd))
            {
                Deslocamento desMar = new Deslocamento()
                {
                    Tipo  = "Espaço",
                    Valor = genValorMag.GerarEntre(new ValorMag(1, 0), new ValorMag(99, 15), rnd)
                };
            }

            especie.RespostaMax = new Resposta()
            {
                Bravura     = especie.RespostaMin.Bravura + rng.GerarEntre(1, 1000, rnd),
                Coragem     = especie.RespostaMin.Coragem + rng.GerarEntre(1, 1000, rnd),
                Desespero   = especie.RespostaMin.Desespero + rng.GerarEntre(1, 1000, rnd),
                Heroismo    = especie.RespostaMin.Heroismo + rng.GerarEntre(1, 1000, rnd),
                Indiferenca = especie.RespostaMin.Indiferenca + rng.GerarEntre(1, 1000, rnd),
                Medo        = especie.RespostaMin.Medo + rng.GerarEntre(1, 1000, rnd),
                Panico      = especie.RespostaMin.Panico + rng.GerarEntre(1, 1000, rnd)
            };
            return(especie);
        }
示例#5
0
 private static bool NaoHouveDeslocamentoPIM(Deslocamento deslocamento)
 {
     return(!deslocamento.CdOcorrenciaInicioPIM.HasValue && !deslocamento.CdOcorrenciaFimPIM.HasValue);
 }