diff --git a/eos/saveddata/drone.py b/eos/saveddata/drone.py index ff4977f08..d76f5027e 100644 --- a/eos/saveddata/drone.py +++ b/eos/saveddata/drone.py @@ -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): diff --git a/eos/saveddata/fighter.py b/eos/saveddata/fighter.py index c9dbffe0c..876c631aa 100644 --- a/eos/saveddata/fighter.py +++ b/eos/saveddata/fighter.py @@ -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 diff --git a/eos/saveddata/module.py b/eos/saveddata/module.py index 32584133c..6f7620b62 100644 --- a/eos/saveddata/module.py +++ b/eos/saveddata/module.py @@ -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 diff --git a/eos/utils/cycles.py b/eos/utils/cycles.py index 792e816f3..59c08deae 100644 --- a/eos/utils/cycles.py +++ b/eos/utils/cycles.py @@ -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): diff --git a/graphs/data/fitDamageStats/cache/time.py b/graphs/data/fitDamageStats/cache/time.py index 4b31aae7b..5e8126073 100644 --- a/graphs/data/fitDamageStats/cache/time.py +++ b/graphs/data/fitDamageStats/cache/time.py @@ -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) diff --git a/graphs/data/fitRemoteReps/cache.py b/graphs/data/fitRemoteReps/cache.py index 3cecab36c..ab392b4f1 100644 --- a/graphs/data/fitRemoteReps/cache.py +++ b/graphs/data/fitRemoteReps/cache.py @@ -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)