Expose data about reloads to cycle getter
This commit is contained in:
@@ -219,7 +219,7 @@ class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
|
||||
cycleTime = self.cycleTime
|
||||
if cycleTime == 0:
|
||||
return None
|
||||
return CycleInfo(self.cycleTime, 0, math.inf)
|
||||
return CycleInfo(self.cycleTime, 0, math.inf, False)
|
||||
|
||||
@property
|
||||
def miningStats(self):
|
||||
|
||||
@@ -263,16 +263,19 @@ class Fighter(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
|
||||
return cycleParamsInfinite if totalOnlyInfinite >= totalAllWithReloads else cycleParamsReload
|
||||
|
||||
def getCycleParametersPerEffectInfinite(self):
|
||||
return {a.effectID: CycleInfo(a.cycleTime, 0, math.inf) for a in self.abilities if a.numShots == 0 and a.cycleTime > 0}
|
||||
return {
|
||||
a.effectID: CycleInfo(a.cycleTime, 0, math.inf, False)
|
||||
for a in self.abilities
|
||||
if a.numShots == 0 and a.cycleTime > 0}
|
||||
|
||||
def getCycleParametersPerEffect(self, reloadOverride=None):
|
||||
factorReload = reloadOverride if reloadOverride is not None else self.owner.factorReload
|
||||
# Assume it can cycle infinitely
|
||||
if not factorReload:
|
||||
return {a.effectID: CycleInfo(a.cycleTime, 0, math.inf) for a in self.abilities if a.cycleTime > 0}
|
||||
return {a.effectID: CycleInfo(a.cycleTime, 0, math.inf, False) for a in self.abilities if a.cycleTime > 0}
|
||||
limitedAbilities = [a for a in self.abilities if a.numShots > 0 and a.cycleTime > 0]
|
||||
if len(limitedAbilities) == 0:
|
||||
return {a.effectID: CycleInfo(a.cycleTime, 0, math.inf) for a in self.abilities if a.cycleTime > 0}
|
||||
return {a.effectID: CycleInfo(a.cycleTime, 0, math.inf, False) for a in self.abilities if a.cycleTime > 0}
|
||||
validAbilities = [a for a in self.abilities if a.cycleTime > 0]
|
||||
if len(validAbilities) == 0:
|
||||
return {}
|
||||
@@ -300,13 +303,13 @@ class Fighter(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
|
||||
sequence = []
|
||||
if extraShotTime is not None:
|
||||
if regularShots > 0:
|
||||
sequence.append(CycleInfo(ability.cycleTime, 0, regularShots))
|
||||
sequence.append(CycleInfo(extraShotTime, refuelTime, 1))
|
||||
sequence.append(CycleInfo(ability.cycleTime, 0, regularShots, False))
|
||||
sequence.append(CycleInfo(extraShotTime, refuelTime, 1, True))
|
||||
else:
|
||||
regularShotsNonReload = regularShots - 1
|
||||
if regularShotsNonReload > 0:
|
||||
sequence.append(CycleInfo(ability.cycleTime, 0, regularShotsNonReload))
|
||||
sequence.append(CycleInfo(ability.cycleTime, refuelTime, 1))
|
||||
sequence.append(CycleInfo(ability.cycleTime, 0, regularShotsNonReload, False))
|
||||
sequence.append(CycleInfo(ability.cycleTime, refuelTime, 1, True))
|
||||
cycleParams[ability.effectID] = CycleSequence(sequence, math.inf)
|
||||
return cycleParams
|
||||
|
||||
|
||||
@@ -900,14 +900,14 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
|
||||
early_cycles = cycles_until_reload - final_cycles
|
||||
# Single cycle until effect cannot run anymore
|
||||
if early_cycles == 0:
|
||||
return CycleInfo(active_time, 0, 1)
|
||||
return CycleInfo(active_time, 0, 1, False)
|
||||
# Multiple cycles with the same parameters
|
||||
if forced_inactive_time == 0:
|
||||
return CycleInfo(active_time, 0, cycles_until_reload)
|
||||
return CycleInfo(active_time, 0, cycles_until_reload, False)
|
||||
# Multiple cycles with different parameters
|
||||
return CycleSequence((
|
||||
CycleInfo(active_time, forced_inactive_time, early_cycles),
|
||||
CycleInfo(active_time, 0, final_cycles)
|
||||
CycleInfo(active_time, forced_inactive_time, early_cycles, False),
|
||||
CycleInfo(active_time, 0, final_cycles, False)
|
||||
), 1)
|
||||
# Module cycles the same way all the time in 3 cases:
|
||||
# 1) caller doesn't want to take into account reload time
|
||||
@@ -918,7 +918,8 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
|
||||
cycles_until_reload == math.inf or
|
||||
forced_inactive_time >= reload_time
|
||||
):
|
||||
return CycleInfo(active_time, forced_inactive_time, math.inf)
|
||||
isInactivityReload = factorReload and forced_inactive_time >= reload_time
|
||||
return CycleInfo(active_time, forced_inactive_time, math.inf, isInactivityReload)
|
||||
# We've got to take reload into consideration
|
||||
else:
|
||||
final_cycles = 1
|
||||
@@ -926,10 +927,10 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
|
||||
# If effect has to reload after each its cycle, then its parameters
|
||||
# are the same all the time
|
||||
if early_cycles == 0:
|
||||
return CycleInfo(active_time, reload_time, math.inf)
|
||||
return CycleInfo(active_time, reload_time, math.inf, True)
|
||||
return CycleSequence((
|
||||
CycleInfo(active_time, forced_inactive_time, early_cycles),
|
||||
CycleInfo(active_time, reload_time, final_cycles)
|
||||
CycleInfo(active_time, forced_inactive_time, early_cycles, False),
|
||||
CycleInfo(active_time, reload_time, final_cycles, True)
|
||||
), math.inf)
|
||||
|
||||
@property
|
||||
|
||||
@@ -6,10 +6,11 @@ from utils.repr import makeReprStr
|
||||
|
||||
class CycleInfo:
|
||||
|
||||
def __init__(self, activeTime, inactiveTime, quantity):
|
||||
def __init__(self, activeTime, inactiveTime, quantity, isInactivityReload):
|
||||
self.activeTime = activeTime
|
||||
self.inactiveTime = inactiveTime
|
||||
self.quantity = quantity
|
||||
self.isInactivityReload = isInactivityReload
|
||||
|
||||
@property
|
||||
def averageTime(self):
|
||||
@@ -18,7 +19,7 @@ class CycleInfo:
|
||||
def iterCycles(self):
|
||||
i = 0
|
||||
while i < self.quantity:
|
||||
yield self.activeTime, self.inactiveTime
|
||||
yield self.activeTime, self.inactiveTime, self.isInactivityReload
|
||||
i += 1
|
||||
|
||||
def _getCycleQuantity(self):
|
||||
@@ -28,7 +29,7 @@ class CycleInfo:
|
||||
return (self.activeTime + self.inactiveTime) * self.quantity
|
||||
|
||||
def __repr__(self):
|
||||
spec = ['activeTime', 'inactiveTime', 'quantity']
|
||||
spec = ['activeTime', 'inactiveTime', 'quantity', 'isInactivityReload']
|
||||
return makeReprStr(self, spec)
|
||||
|
||||
|
||||
@@ -47,8 +48,8 @@ class CycleSequence:
|
||||
i = 0
|
||||
while i < self.quantity:
|
||||
for cycleInfo in self.sequence:
|
||||
for cycleTime, inactiveTime in cycleInfo.iterCycles():
|
||||
yield cycleTime, inactiveTime
|
||||
for cycleTime, inactiveTime, isInactivityReload in cycleInfo.iterCycles():
|
||||
yield cycleTime, inactiveTime, isInactivityReload
|
||||
i += 1
|
||||
|
||||
def _getCycleQuantity(self):
|
||||
|
||||
6
graphs/data/fitDamageStats/cache/time.py
vendored
6
graphs/data/fitDamageStats/cache/time.py
vendored
@@ -181,7 +181,7 @@ class TimeCache(FitDataCache):
|
||||
continue
|
||||
currentTime = 0
|
||||
nonstopCycles = 0
|
||||
for cycleTimeMs, inactiveTimeMs in cycleParams.iterCycles():
|
||||
for cycleTimeMs, inactiveTimeMs, isInactivityReload in cycleParams.iterCycles():
|
||||
cycleVolleys = []
|
||||
volleyParams = mod.getVolleyParameters(spoolOptions=SpoolOptions(SpoolType.CYCLES, nonstopCycles, True))
|
||||
for volleyTimeMs, volley in volleyParams.items():
|
||||
@@ -204,7 +204,7 @@ class TimeCache(FitDataCache):
|
||||
continue
|
||||
currentTime = 0
|
||||
volleyParams = drone.getVolleyParameters()
|
||||
for cycleTimeMs, inactiveTimeMs in cycleParams.iterCycles():
|
||||
for cycleTimeMs, inactiveTimeMs, isInactivityReload in cycleParams.iterCycles():
|
||||
cycleVolleys = []
|
||||
for volleyTimeMs, volley in volleyParams.items():
|
||||
cycleVolleys.append(volley)
|
||||
@@ -226,7 +226,7 @@ class TimeCache(FitDataCache):
|
||||
continue
|
||||
currentTime = 0
|
||||
abilityVolleyParams = volleyParams[effectID]
|
||||
for cycleTimeMs, inactiveTimeMs in abilityCycleParams.iterCycles():
|
||||
for cycleTimeMs, inactiveTimeMs, isInactivityReload in abilityCycleParams.iterCycles():
|
||||
cycleVolleys = []
|
||||
for volleyTimeMs, volley in abilityVolleyParams.items():
|
||||
cycleVolleys.append(volley)
|
||||
|
||||
@@ -159,7 +159,7 @@ class TimeCache(FitDataCache):
|
||||
continue
|
||||
currentTime = 0
|
||||
nonstopCycles = 0
|
||||
for cycleTimeMs, inactiveTimeMs in cycleParams.iterCycles():
|
||||
for cycleTimeMs, inactiveTimeMs, isInactivityReload in cycleParams.iterCycles():
|
||||
cycleRepAmounts = []
|
||||
repAmountParams = mod.getRepAmountParameters(spoolOptions=SpoolOptions(SpoolType.CYCLES, nonstopCycles, True))
|
||||
for repTimeMs, repAmount in repAmountParams.items():
|
||||
@@ -182,7 +182,7 @@ class TimeCache(FitDataCache):
|
||||
continue
|
||||
currentTime = 0
|
||||
repAmountParams = drone.getRepAmountParameters()
|
||||
for cycleTimeMs, inactiveTimeMs in cycleParams.iterCycles():
|
||||
for cycleTimeMs, inactiveTimeMs, isInactivityReload in cycleParams.iterCycles():
|
||||
cycleRepAmounts = []
|
||||
for repTimeMs, repAmount in repAmountParams.items():
|
||||
cycleRepAmounts.append(repAmount)
|
||||
|
||||
Reference in New Issue
Block a user