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); }
public BestModsResult(List <Mod> pMods, Elements[] pElements, DPSResult pDPSResult) { this.Mods = pMods; this.Elements = pElements; this.DPSResult = pDPSResult; }