Implement cache which stores data about cache TPs and webs

This commit is contained in:
DarkPhoenix
2019-07-07 20:16:21 +03:00
parent 6ce72e4fb3
commit ec8b771a24
2 changed files with 43 additions and 0 deletions

View File

@@ -25,6 +25,7 @@ from eos.utils.stats import DmgTypes
from gui.builtinGraphs.base import FitGraph, XDef, YDef, Input, VectorDef
from service.const import GraphCacheCleanupReason
from .calc import getTurretMult, getLauncherMult, getDroneMult, getFighterAbilityMult, getSmartbombMult, getBombMult, getGuidedBombMult
from .projectedCache import ProjectedDataCache
from .timeCache import TimeCache
@@ -33,6 +34,7 @@ class FitDamageStatsGraph(FitGraph):
def __init__(self):
super().__init__()
self._timeCache = TimeCache()
self._projectedCache = ProjectedDataCache()
def _clearInternalCache(self, reason, extraData):
# Here, we care only about fit changes and graph changes.
@@ -42,8 +44,10 @@ class FitDamageStatsGraph(FitGraph):
# values which do not rely on any graph options
if reason == GraphCacheCleanupReason.fitChanged:
self._timeCache.clearForFit(extraData)
self._projectedCache.clearForFit(extraData)
elif reason == GraphCacheCleanupReason.graphSwitched:
self._timeCache.clearAll()
self._projectedCache.clearAll()
# UI stuff
internalName = 'dmgStatsGraph'

View File

@@ -0,0 +1,39 @@
# =============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of pyfa.
#
# pyfa is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# pyfa is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with pyfa. If not, see <http://www.gnu.org/licenses/>.
# =============================================================================
from gui.builtinGraphs.base import FitDataCache
class ProjectedDataCache(FitDataCache):
def getProjModData(self, fit):
try:
projectedData = self._data[fit.ID]['modules']
except KeyError:
# Format of items for both: (boost strength, optimal, falloff)
webMods = []
tpMods = []
projectedData = self._data.setdefault(fit.ID, {})['modules'] = (webMods, tpMods)
for mod in fit.modules:
if 'remoteWebifierFalloff' in mod.item.effects or 'structureModuleEffectStasisWebifier' in mod.item.effects:
webMods.append((mod.getModifiedItemAttr('speedFactor'), mod.maxRange, mod.falloff))
if 'remoteTargetPaintFalloff' in mod.item.effects or 'structureModuleEffectTargetPainter' in mod.item.effects:
tpMods.append((mod.getModifiedItemAttr('signatureRadiusBonus'), mod.maxRange, mod.falloff))
return projectedData