From 15b6a848e81aab1fb353d7f24ca0ba774ff78bda Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Thu, 4 Jul 2019 11:40:38 +0300 Subject: [PATCH] Move warp time subwarp speed calculation to separate cache as well --- gui/builtinGraphs/base.py | 12 +++++++++++ gui/builtinGraphs/fitDamageStats/timeCache.py | 12 ++--------- gui/builtinGraphs/fitWarpTime.py | 21 +++++++++++++------ 3 files changed, 29 insertions(+), 16 deletions(-) diff --git a/gui/builtinGraphs/base.py b/gui/builtinGraphs/base.py index cada75c4e..2f00ac20e 100644 --- a/gui/builtinGraphs/base.py +++ b/gui/builtinGraphs/base.py @@ -207,5 +207,17 @@ class FitGraph(metaclass=ABCMeta): current += step +class FitDataCache: + + def __init__(self): + self._data = {} + + def clear(self, fitID): + if fitID is None: + self._data.clear() + elif fitID in self._data: + del self._data[fitID] + + # noinspection PyUnresolvedReferences from gui.builtinGraphs import * diff --git a/gui/builtinGraphs/fitDamageStats/timeCache.py b/gui/builtinGraphs/fitDamageStats/timeCache.py index 8a8a905ab..3f8eae4f7 100644 --- a/gui/builtinGraphs/fitDamageStats/timeCache.py +++ b/gui/builtinGraphs/fitDamageStats/timeCache.py @@ -23,18 +23,10 @@ from copy import copy from eos.utils.float import floatUnerr from eos.utils.spoolSupport import SpoolType, SpoolOptions from eos.utils.stats import DmgTypes +from gui.builtinGraphs.base import FitDataCache -class TimeCache: - - def __init__(self): - self._data = {} - - def clear(self, fitID): - if fitID is None: - self._data.clear() - elif fitID in self._data: - del self._data[fitID] +class TimeCache(FitDataCache): def getData(self, fitID, cacheType): return self._data[fitID][cacheType] diff --git a/gui/builtinGraphs/fitWarpTime.py b/gui/builtinGraphs/fitWarpTime.py index 955fa63b6..a5720c17b 100644 --- a/gui/builtinGraphs/fitWarpTime.py +++ b/gui/builtinGraphs/fitWarpTime.py @@ -21,7 +21,7 @@ import math from eos.const import FittingModuleState -from .base import FitGraph, XDef, YDef, Input +from .base import FitGraph, XDef, YDef, Input, FitDataCache AU_METERS = 149597870700 @@ -29,6 +29,13 @@ AU_METERS = 149597870700 class FitWarpTimeGraph(FitGraph): + def __init__(self): + super().__init__() + self._subspeedCache = SubwarpSpeedCache() + + def _clearInternalCache(self, fitID): + self._subspeedCache.clear(fitID) + # UI stuff name = 'Warp Time' xDefs = [ @@ -53,7 +60,7 @@ class FitWarpTimeGraph(FitGraph): def _distance2time(self, mainInput, miscInputs, fit, tgt): xs = [] ys = [] - subwarpSpeed = self.__getSubwarpSpeed(fit) + subwarpSpeed = self._subspeedCache.getSubwarpSpeed(fit) warpSpeed = fit.warpSpeed for distance in self._iterLinear(mainInput[1]): time = calculate_time_in_warp(max_subwarp_speed=subwarpSpeed, max_warp_speed=warpSpeed, warp_dist=distance) @@ -64,10 +71,12 @@ class FitWarpTimeGraph(FitGraph): _getters = { ('distance', 'time'): _distance2time} - # Cache generation - def __getSubwarpSpeed(self, fit): + +class SubwarpSpeedCache(FitDataCache): + + def getSubwarpSpeed(self, fit): try: - subwarpSpeed = self._calcCache[fit.ID] + subwarpSpeed = self._data[fit.ID] except KeyError: modStates = {} for mod in fit.modules: @@ -97,7 +106,7 @@ class FitWarpTimeGraph(FitGraph): fighter.active = False fit.calculateModifiedAttributes() subwarpSpeed = fit.ship.getModifiedItemAttr('maxVelocity') - self._calcCache[fit.ID] = subwarpSpeed + self._data[fit.ID] = subwarpSpeed for projInfo, state in projFitStates.items(): projInfo.active = state for mod, state in modStates.items():