Skip to content

Commit dbc2993

Browse files
committed
Support inflicted damage for breachers
1 parent 219173c commit dbc2993

File tree

3 files changed

+37
-30
lines changed

3 files changed

+37
-30
lines changed

eos/saveddata/module.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -955,6 +955,13 @@ def calculateModifiedAttributes(self, fit, runTime, forceProjected=False, gang=F
955955
and ((gang and effect.isType("gang")) or not gang):
956956
effect.handler(fit, self, context, projectionRange, effect=effect)
957957

958+
def getCycleParametersForDps(self, reloadOverride=None):
959+
# Special hack for breachers, since those are DoT and work independently of gun cycle
960+
if self.isBreacher:
961+
return CycleInfo(activeTime=1000, inactiveTime=0, quantity=math.inf, isInactivityReload=False)
962+
else:
963+
return self.getCycleParameters(reloadOverride=reloadOverride)
964+
958965
def getCycleParameters(self, reloadOverride=None):
959966
"""Copied from new eos as well"""
960967
# Determine if we'll take into account reload time or not

eos/utils/stats.py

Lines changed: 14 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ def __imul__(self, mul):
4545
self.relative *= mul
4646
return self
4747

48+
def __truediv__(self, div):
49+
return type(self)(absolute=self.absolute / div, relative=self.relative / div)
50+
4851

4952
class DmgTypes:
5053
"""
@@ -176,6 +179,17 @@ def __imul__(self, mul):
176179
b *= mul
177180
return self
178181

182+
def __truediv__(self, div):
183+
new = type(self)(
184+
em=self._em / div,
185+
thermal=self._thermal / div,
186+
kinetic=self._kinetic / div,
187+
explosive=self._explosive / div)
188+
new.profile = self.profile
189+
for k, v in self._breachers.items():
190+
new._breachers[k] = [b / div for b in v]
191+
return new
192+
179193
def __bool__(self):
180194
return any((
181195
self._em, self._thermal, self._kinetic, self._explosive,
@@ -199,30 +213,6 @@ def names(short=None, postProcessor=None, includePure=False):
199213
return value
200214

201215

202-
class DmgInflicted(DmgTypes):
203-
204-
@classmethod
205-
def from_dmg_types(cls, dmg_types):
206-
return cls(em=dmg_types.em, thermal=dmg_types.thermal, kinetic=dmg_types.kinetic, explosive=dmg_types.explosive, breacher=dmg_types.breacher)
207-
208-
def __add__(self, other):
209-
return type(self)(
210-
em=self.em + other.em,
211-
thermal=self.thermal + other.thermal,
212-
kinetic=self.kinetic + other.kinetic,
213-
explosive=self.explosive + other.explosive,
214-
breacher=self.breacher + other.breacher)
215-
216-
def __iadd__(self, other):
217-
self.em += other.em
218-
self.thermal += other.thermal
219-
self.kinetic += other.kinetic
220-
self.explosive += other.explosive
221-
self.breacher += other.breacher
222-
self._calcTotal()
223-
return self
224-
225-
226216
class RRTypes:
227217
"""Container for tank data stats."""
228218

graphs/data/fitDamageStats/cache/time.py

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
from eos.utils.float import floatUnerr
2424
from eos.utils.spoolSupport import SpoolOptions, SpoolType
25-
from eos.utils.stats import DmgTypes, DmgInflicted
25+
from eos.utils.stats import DmgTypes
2626
from graphs.data.base import FitDataCache
2727

2828

@@ -170,27 +170,37 @@ def addDpsVolley(ddKey, addedTimeStart, addedTimeFinish, addedVolleys):
170170
def addDmg(ddKey, addedTime, addedDmg):
171171
if addedDmg.total == 0:
172172
return
173-
intCacheDmg.setdefault(ddKey, {})[addedTime] = DmgInflicted.from_dmg_types(addedDmg)
173+
addedDmg._breachers = {addedTime + k: v for k, v in addedDmg._breachers.items()}
174+
intCacheDmg.setdefault(ddKey, {})[addedTime] = addedDmg
174175

175176
# Modules
176177
for mod in src.item.activeModulesIter():
177178
if not mod.isDealingDamage():
178179
continue
179-
cycleParams = mod.getCycleParameters(reloadOverride=True)
180+
cycleParams = mod.getCycleParametersForDps(reloadOverride=True)
180181
if cycleParams is None:
181182
continue
182183
currentTime = 0
183184
nonstopCycles = 0
185+
isBreacher = mod.isBreacher
184186
for cycleTimeMs, inactiveTimeMs, isInactivityReload in cycleParams.iterCycles():
185187
cycleVolleys = []
186188
volleyParams = mod.getVolleyParameters(spoolOptions=SpoolOptions(SpoolType.CYCLES, nonstopCycles, True))
187189

188190
for volleyTimeMs, volley in volleyParams.items():
189191
cycleVolleys.append(volley)
190-
addDmg(mod, currentTime + volleyTimeMs / 1000, volley)
191-
if mod.isBreacher:
192+
time = currentTime + volleyTimeMs / 1000
193+
if isBreacher:
194+
time += 1
195+
addDmg(mod, time, volley)
196+
if isBreacher:
192197
break
193-
addDpsVolley(mod, currentTime, currentTime + cycleTimeMs / 1000, cycleVolleys)
198+
timeStart = currentTime
199+
timeFinish = currentTime + cycleTimeMs / 1000
200+
if isBreacher:
201+
timeStart += 1
202+
timeFinish += 1
203+
addDpsVolley(mod, timeStart, timeFinish, cycleVolleys)
194204
if inactiveTimeMs > 0:
195205
nonstopCycles = 0
196206
else:

0 commit comments

Comments
 (0)