Ejemplo n.º 1
0
        public static DPSResult MainCalculation(Eidolon pEidolon, DPSCase pCase, Weapon pSniper, Elements[] pElements, Health pHealthType, int pNumberOfUserShotsToCalculateDamageFor, params Mod[] pMods)
        {
            var dps = DPSBreakdown.FromPrimitives(pSniper, pCase, pElements, pHealthType, pMods);

            double MagazineTime     = (dps.Magazine / dps.FireRate) + dps.Reload;
            double BulletsPerSecond = dps.Magazine / MagazineTime;

            int baseLevel = 0;

            switch (pEidolon)
            {
            case Eidolon.Terry: baseLevel = 50; break;

            case Eidolon.Gary: baseLevel = 55; break;

            case Eidolon.Harry: baseLevel = 60; break;

            default: throw new NotImplementedException("Unknown Eidolon: " + pEidolon.ToString());
            }

            DPSResult result = new DPSResult();

            //Current Health = Base Health × (1 + (Current Level − Base Level )^2 × 0.015 )
            result.EidolonLimbHealth = 15000 * (1.0 + ((baseLevel - 1) * (baseLevel - 1)) * 0.015);


            var simInput = new DPSCalcPerformanceCritical.SimulationInput();

            simInput.LimbHealth = result.EidolonLimbHealth;
            simInput.Magazine   = dps.Magazine;
            simInput.FireRate   = dps.FireRate;
            simInput.NumberOfUserShotsToCalculateDamageFor = pNumberOfUserShotsToCalculateDamageFor;
            simInput.PelletsTillx15 = pSniper.PelletsTillx15;
            simInput.Case           = pCase;
            simInput.TotalMultishot = dps.TotalMultishot;
            simInput.TotalDamageWithAllFactorsIncluded = dps.TotalDamage_6_WithHealthTypeFactors;

            var simResult = DPSCalcPerformanceCritical.Simulate(simInput);

            result.ToLimbBreak_NumReloads           = simResult.NumReloads;
            result.ToLimbBreak_NumShots             = simResult.NumShots;
            result.ToLimbBreak_TotalDamage          = simResult.TotalDamage;
            result.ToLimbBreak_TimeSeconds          = (simResult.NumShots * (1.0 / dps.FireRate)) + (simResult.NumReloads * dps.Reload);
            result.DamageAfterVariableNumberOfShots = simResult.DamageAfterUserNumberOfShots;

            result.WFBuilderSustainedRaw     = dps.TotalDamage_5_WithMultishot * BulletsPerSecond;
            result.WFBuilderSustainedDetails = dps.TotalDamage_6_WithHealthTypeFactors * BulletsPerSecond;
            result.ReloadTime = TimeSpan.FromSeconds(dps.Reload);
            return(result);
        }
Ejemplo n.º 2
0
 public BestModsResult(List <Mod> pMods, Elements[] pElements, DPSResult pDPSResult)
 {
     this.Mods      = pMods;
     this.Elements  = pElements;
     this.DPSResult = pDPSResult;
 }