3333from eos .utils .default import DEFAULT
3434from eos .utils .float import floatUnerr
3535from eos .utils .spoolSupport import calculateSpoolup , resolveSpoolOptions
36- from eos .utils .stats import BaseVolleyStats , BreacherInfo , DmgTypes , RRTypes
36+ from eos .utils .stats import BreacherInfo , DmgTypes , RRTypes
3737
3838
3939pyfalog = Logger (__name__ )
@@ -483,7 +483,9 @@ def getVolleyParameters(self, spoolOptions=None, targetProfile=None, ignoreState
483483 absolute = self .getModifiedChargeAttr ("dotMaxDamagePerTick" , 0 ),
484484 relative = self .getModifiedChargeAttr ("dotMaxHPPercentagePerTick" , 0 ) / 100 )
485485 for i in range (subcycles ):
486- self .__baseVolley [dmgDelay + i ] = BaseVolleyStats (0 , 0 , 0 , 0 , breachers = [breacher_info ])
486+ volley = DmgTypes .default ()
487+ volley .add_breacher (dmgDelay + i , breacher_info )
488+ self .__baseVolley [dmgDelay + i ] = volley
487489 else :
488490 dmgGetter = self .getModifiedChargeAttr if self .charge else self .getModifiedItemAttr
489491 dmgMult = self .getModifiedItemAttr ("damageMultiplier" , 1 )
@@ -502,7 +504,7 @@ def getVolleyParameters(self, spoolOptions=None, targetProfile=None, ignoreState
502504 else :
503505 subcycles = 1
504506 for i in range (subcycles ):
505- self .__baseVolley [dmgDelay + dmgSubcycle * i ] = BaseVolleyStats (
507+ self .__baseVolley [dmgDelay + dmgSubcycle * i ] = DmgTypes (
506508 em = (dmgGetter ("emDamage" , 0 )) * dmgMult ,
507509 thermal = (dmgGetter ("thermalDamage" , 0 )) * dmgMult ,
508510 kinetic = (dmgGetter ("kineticDamage" , 0 )) * dmgMult ,
@@ -513,43 +515,35 @@ def getVolleyParameters(self, spoolOptions=None, targetProfile=None, ignoreState
513515 self .getModifiedItemAttr ("damageMultiplierBonusPerCycle" , 0 ),
514516 self .rawCycleTime / 1000 , spoolType , spoolAmount )[0 ]
515517 spoolMultiplier = 1 + spoolBoost
516- adjustedVolley = {}
517- for volleyTime , baseValue in self .__baseVolley .items ():
518- adjustedVolley [volleyTime ] = DmgTypes .from_base_and_profile (
519- base = baseValue , tgtProfile = targetProfile , mult = spoolMultiplier )
520- return adjustedVolley
518+ adjustedVolleys = {}
519+ for volleyTime , baseVolley in self .__baseVolley .items ():
520+ adjustedVolley = baseVolley * spoolMultiplier
521+ adjustedVolley .profile = targetProfile
522+ adjustedVolleys [volleyTime ] = adjustedVolley
523+ return adjustedVolleys
521524
522525 def getVolley (self , spoolOptions = None , targetProfile = None , ignoreState = False ):
523526 volleyParams = self .getVolleyParameters (spoolOptions = spoolOptions , targetProfile = targetProfile , ignoreState = ignoreState )
524527 if len (volleyParams ) == 0 :
525528 return DmgTypes .default ()
526529 return volleyParams [min (volleyParams )]
527530
528- def getDps (self , spoolOptions = None , targetProfile = None , ignoreState = False , getSpreadDPS = False ):
529- dmgDuringCycle = DmgTypes .default ()
530- cycleParams = self .getCycleParametersForDps ()
531+ def getDps (self , spoolOptions = None , targetProfile = None , ignoreState = False ):
532+ dps = DmgTypes .default ()
533+ cycleParams = self .getCycleParameters ()
531534 if cycleParams is None :
532- return dmgDuringCycle
535+ return dps
533536 volleyParams = self .getVolleyParameters (spoolOptions = spoolOptions , targetProfile = targetProfile , ignoreState = ignoreState )
534537 avgCycleTime = cycleParams .averageTime
535538 if len (volleyParams ) == 0 or avgCycleTime == 0 :
536- return dmgDuringCycle
539+ return dps
540+ if self .isBreacher :
541+ return volleyParams [min (volleyParams )]
537542 for volleyValue in volleyParams .values ():
538- dmgDuringCycle += volleyValue
543+ dps += volleyValue
539544 dpsFactor = 1 / (avgCycleTime / 1000 )
540- dps = DmgTypes (
541- em = dmgDuringCycle .em * dpsFactor ,
542- thermal = dmgDuringCycle .thermal * dpsFactor ,
543- kinetic = dmgDuringCycle .kinetic * dpsFactor ,
544- explosive = dmgDuringCycle .explosive * dpsFactor ,
545- breacher = dmgDuringCycle .breacher * dpsFactor )
546- if not getSpreadDPS :
547- return dps
548- return {'em' : dmgDuringCycle .em * dpsFactor ,
549- 'therm' : dmgDuringCycle .thermal * dpsFactor ,
550- 'kin' : dmgDuringCycle .kinetic * dpsFactor ,
551- 'exp' : dmgDuringCycle .explosive * dpsFactor ,
552- 'breach' : dmgDuringCycle .breach * dpsFactor }
545+ dps *= dpsFactor
546+ return dps
553547
554548 def isRemoteRepping (self , ignoreState = False ):
555549 repParams = self .getRepAmountParameters (ignoreState = ignoreState )
@@ -961,13 +955,6 @@ def calculateModifiedAttributes(self, fit, runTime, forceProjected=False, gang=F
961955 and ((gang and effect .isType ("gang" )) or not gang ):
962956 effect .handler (fit , self , context , projectionRange , effect = effect )
963957
964- def getCycleParametersForDps (self , reloadOverride = None ):
965- # Special hack for breachers, since those are DoT and work independently of gun cycle
966- if self .isBreacher :
967- return CycleInfo (activeTime = 1000 , inactiveTime = 0 , quantity = math .inf , isInactivityReload = False )
968- else :
969- return self .getCycleParameters (reloadOverride = reloadOverride )
970-
971958 def getCycleParameters (self , reloadOverride = None ):
972959 """Copied from new eos as well"""
973960 # Determine if we'll take into account reload time or not
0 commit comments