From ec8b771a246732ccfd20de2df6e6d73fb12b85cb Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Sun, 7 Jul 2019 20:16:21 +0300 Subject: [PATCH] Implement cache which stores data about cache TPs and webs --- gui/builtinGraphs/fitDamageStats/graph.py | 4 ++ .../fitDamageStats/projectedCache.py | 39 +++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 gui/builtinGraphs/fitDamageStats/projectedCache.py diff --git a/gui/builtinGraphs/fitDamageStats/graph.py b/gui/builtinGraphs/fitDamageStats/graph.py index fbdeca4de..8a1d1cb6c 100644 --- a/gui/builtinGraphs/fitDamageStats/graph.py +++ b/gui/builtinGraphs/fitDamageStats/graph.py @@ -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' diff --git a/gui/builtinGraphs/fitDamageStats/projectedCache.py b/gui/builtinGraphs/fitDamageStats/projectedCache.py new file mode 100644 index 000000000..4fc12d29f --- /dev/null +++ b/gui/builtinGraphs/fitDamageStats/projectedCache.py @@ -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 . +# ============================================================================= + + +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