Implement breacher logic on module level
This commit is contained in:
@@ -479,7 +479,7 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut, M
|
||||
absolute=self.getModifiedChargeAttr("dotMaxDamagePerTick", 0),
|
||||
relative=self.getModifiedChargeAttr("dotMaxHPPercentagePerTick", 0))
|
||||
for i in range(subcycles):
|
||||
self.__baseVolley[dmgDelay + i] = DmgTypes(0, 0, 0, 0, breacher=breacher_info)
|
||||
self.__baseVolley[dmgDelay + i] = DmgTypes(0, 0, 0, 0, breachers=[breacher_info])
|
||||
else:
|
||||
dmgGetter = self.getModifiedChargeAttr if self.charge else self.getModifiedItemAttr
|
||||
dmgMult = self.getModifiedItemAttr("damageMultiplier", 1)
|
||||
@@ -516,7 +516,7 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut, M
|
||||
thermal=volleyValue.thermal * spoolMultiplier * (1 - getattr(targetProfile, "thermalAmount", 0)),
|
||||
kinetic=volleyValue.kinetic * spoolMultiplier * (1 - getattr(targetProfile, "kineticAmount", 0)),
|
||||
explosive=volleyValue.explosive * spoolMultiplier * (1 - getattr(targetProfile, "explosiveAmount", 0)),
|
||||
breacher=volleyValue.breacher)
|
||||
breachers=volleyValue.breachers)
|
||||
return adjustedVolley
|
||||
|
||||
def getVolley(self, spoolOptions=None, targetProfile=None, ignoreState=False):
|
||||
|
||||
@@ -32,16 +32,36 @@ class BreacherInfo(NamedTuple):
|
||||
absolute: float
|
||||
relative: float
|
||||
|
||||
def __mul__(self, mul):
|
||||
return type(self)(absolute=self.absolute * mul, relative=self.relative * mul)
|
||||
|
||||
def __imul__(self, mul):
|
||||
if mul == 1:
|
||||
return
|
||||
self.absolute *= mul
|
||||
self.relative *= mul
|
||||
return self
|
||||
|
||||
def __truediv__(self, div):
|
||||
return type(self)(absolute=self.absolute / div, relative=self.relative / div)
|
||||
|
||||
def __itruediv__(self, div):
|
||||
if div == 1:
|
||||
return
|
||||
self.absolute /= div
|
||||
self.relative /= div
|
||||
return self
|
||||
|
||||
|
||||
class DmgTypes:
|
||||
"""Container for damage data stats."""
|
||||
|
||||
def __init__(self, em, thermal, kinetic, explosive, breacher=None):
|
||||
def __init__(self, em, thermal, kinetic, explosive, breachers=None):
|
||||
self.em = em
|
||||
self.thermal = thermal
|
||||
self.kinetic = kinetic
|
||||
self.explosive = explosive
|
||||
self.breacher = [] if breacher is None else breacher
|
||||
self.breachers = [] if breachers is None else breachers
|
||||
self._calcTotal()
|
||||
|
||||
# Iterator is needed to support tuple-style unpacking
|
||||
@@ -77,13 +97,15 @@ class DmgTypes:
|
||||
em=self.em + other.em,
|
||||
thermal=self.thermal + other.thermal,
|
||||
kinetic=self.kinetic + other.kinetic,
|
||||
explosive=self.explosive + other.explosive)
|
||||
explosive=self.explosive + other.explosive,
|
||||
breachers=self.breachers + other.breachers)
|
||||
|
||||
def __iadd__(self, other):
|
||||
self.em += other.em
|
||||
self.thermal += other.thermal
|
||||
self.kinetic += other.kinetic
|
||||
self.explosive += other.explosive
|
||||
self.breachers += other.breachers
|
||||
self._calcTotal()
|
||||
return self
|
||||
|
||||
@@ -92,7 +114,8 @@ class DmgTypes:
|
||||
em=self.em * mul,
|
||||
thermal=self.thermal * mul,
|
||||
kinetic=self.kinetic * mul,
|
||||
explosive=self.explosive * mul)
|
||||
explosive=self.explosive * mul,
|
||||
breachers=[b * mul for b in self.breachers])
|
||||
|
||||
def __imul__(self, mul):
|
||||
if mul == 1:
|
||||
@@ -101,6 +124,7 @@ class DmgTypes:
|
||||
self.thermal *= mul
|
||||
self.kinetic *= mul
|
||||
self.explosive *= mul
|
||||
self.breachers = [b * mul for b in self.breachers]
|
||||
self._calcTotal()
|
||||
return self
|
||||
|
||||
@@ -109,7 +133,8 @@ class DmgTypes:
|
||||
em=self.em / div,
|
||||
thermal=self.thermal / div,
|
||||
kinetic=self.kinetic / div,
|
||||
explosive=self.explosive / div)
|
||||
explosive=self.explosive / div,
|
||||
breachers=[b / div for b in self.breachers])
|
||||
|
||||
def __itruediv__(self, div):
|
||||
if div == 1:
|
||||
@@ -118,13 +143,14 @@ class DmgTypes:
|
||||
self.thermal /= div
|
||||
self.kinetic /= div
|
||||
self.explosive /= div
|
||||
self.breachers = [b / div for b in self.breachers]
|
||||
self._calcTotal()
|
||||
return self
|
||||
|
||||
def __repr__(self):
|
||||
spec = DmgTypes.names()
|
||||
spec.append('total')
|
||||
return makeReprStr(self, spec)
|
||||
class_name = type(self).__name__
|
||||
return (f'<{class_name}(em={self.em}, thermal={self.thermal}, kinetic={self.kinetic}, '
|
||||
f'explosive={self.explosive}, breachers={len(self.breachers)}, total={self.total})>')
|
||||
|
||||
@staticmethod
|
||||
def names(short=None, postProcessor=None):
|
||||
|
||||
Reference in New Issue
Block a user