Convert miscparams to dict in generic methods to avoid extra conversions in every getter implementation

This commit is contained in:
DarkPhoenix
2019-08-13 09:13:19 +03:00
parent 3bc93899fe
commit 01310c166e
3 changed files with 39 additions and 60 deletions

View File

@@ -185,15 +185,14 @@ class FitGraph(metaclass=ABCMeta):
mainParamRange = (mainInput.handle, tuple(normalizer(v, src, tgt) for v in mainInput.value))
else:
mainParamRange = (mainInput.handle, mainInput.value)
miscParams = []
miscParams = {}
for miscInput in miscInputs:
key = (miscInput.handle, miscInput.unit)
if key in self._normalizers:
normalizer = self._normalizers[key]
miscParam = (miscInput.handle, normalizer(miscInput.value, src, tgt))
miscParams[miscInput.handle] = normalizer(miscInput.value, src, tgt)
else:
miscParam = (miscInput.handle, miscInput.value)
miscParams.append(miscParam)
miscParams[miscInput.handle] = miscInput.value
return mainParamRange, miscParams
_limiters = {}
@@ -210,19 +209,13 @@ class FitGraph(metaclass=ABCMeta):
mainHandle, mainValue = mainParamRange
if mainHandle in self._limiters:
limiter = self._limiters[mainHandle]
newMainParamRange = (mainHandle, tuple(limitToRange(v, limiter(src, tgt)) for v in mainValue))
else:
newMainParamRange = mainParamRange
newMiscParams = []
for miscParam in miscParams:
miscHandle, miscValue = miscParam
mainParamRange = (mainHandle, tuple(limitToRange(v, limiter(src, tgt)) for v in mainValue))
for miscHandle in miscParams:
if miscHandle in self._limiters:
limiter = self._limiters[miscHandle]
newMiscParam = (miscHandle, limitToRange(miscValue, limiter(src, tgt)))
newMiscParams.append(newMiscParam)
else:
newMiscParams.append(miscParam)
return newMainParamRange, newMiscParams
miscValue = miscParams[miscHandle]
miscParams[miscHandle] = limitToRange(miscValue, limiter(src, tgt))
return mainParamRange, miscParams
_getters = {}

View File

@@ -135,21 +135,17 @@ class XDistanceMixin(SmoothPointGetter):
_extraDepth = 2
def _getCommonData(self, miscParams, src, tgt):
# Process params into more convenient form
miscParamMap = dict(miscParams)
# Prepare time cache here because we need to do it only once,
# and this function is called once per point info fetch
self._prepareTimeCache(src=src, maxTime=miscParamMap['time'])
self._prepareTimeCache(src=src, maxTime=miscParams['time'])
return {
'applyProjected': GraphSettings.getInstance().get('applyProjected'),
'miscParamMap': miscParamMap,
'dmgMap': self._getDamagePerKey(src=src, time=miscParamMap['time']),
'dmgMap': self._getDamagePerKey(src=src, time=miscParams['time']),
'tgtResists': tgt.getResists()}
def _calculatePoint(self, x, miscParams, src, tgt, commonData):
distance = x
miscParamMap = commonData['miscParamMap']
tgtSpeed = miscParamMap['tgtSpeed']
tgtSpeed = miscParams['tgtSpeed']
tgtSigRadius = tgt.getSigRadius()
if commonData['applyProjected']:
webMods, tpMods = self.graph._projectedCache.getProjModData(src)
@@ -174,11 +170,11 @@ class XDistanceMixin(SmoothPointGetter):
applicationMap = getApplicationPerKey(
src=src,
tgt=tgt,
atkSpeed=miscParamMap['atkSpeed'],
atkAngle=miscParamMap['atkAngle'],
atkSpeed=miscParams['atkSpeed'],
atkAngle=miscParams['atkAngle'],
distance=distance,
tgtSpeed=tgtSpeed,
tgtAngle=miscParamMap['tgtAngle'],
tgtAngle=miscParams['tgtAngle'],
tgtSigRadius=tgtSigRadius)
y = applyDamage(
dmgMap=commonData['dmgMap'],
@@ -190,9 +186,7 @@ class XDistanceMixin(SmoothPointGetter):
class XTimeMixin(PointGetter):
def _prepareApplicationMap(self, miscParams, src, tgt):
# Process params into more convenient form
miscParamMap = dict(miscParams)
tgtSpeed = miscParamMap['tgtSpeed']
tgtSpeed = miscParams['tgtSpeed']
tgtSigRadius = tgt.getSigRadius()
if GraphSettings.getInstance().get('applyProjected'):
webMods, tpMods = self.graph._projectedCache.getProjModData(src)
@@ -205,7 +199,7 @@ class XTimeMixin(PointGetter):
webMods=webMods,
webDrones=webDrones,
webFighters=webFighters,
distance=miscParamMap['distance'])
distance=miscParams['distance'])
tgtSigRadius = tgtSigRadius * getTpMult(
src=src,
tgt=tgt,
@@ -213,16 +207,16 @@ class XTimeMixin(PointGetter):
tpMods=tpMods,
tpDrones=tpDrones,
tpFighters=tpFighters,
distance=miscParamMap['distance'])
distance=miscParams['distance'])
# Get all data we need for all times into maps/caches
applicationMap = getApplicationPerKey(
src=src,
tgt=tgt,
atkSpeed=miscParamMap['atkSpeed'],
atkAngle=miscParamMap['atkAngle'],
distance=miscParamMap['distance'],
atkSpeed=miscParams['atkSpeed'],
atkAngle=miscParams['atkAngle'],
distance=miscParams['distance'],
tgtSpeed=tgtSpeed,
tgtAngle=miscParamMap['tgtAngle'],
tgtAngle=miscParams['tgtAngle'],
tgtSigRadius=tgtSigRadius)
return applicationMap
@@ -297,20 +291,16 @@ class XTgtSpeedMixin(SmoothPointGetter):
_extraDepth = 2
def _getCommonData(self, miscParams, src, tgt):
# Process params into more convenient form
miscParamMap = dict(miscParams)
# Prepare time cache here because we need to do it only once,
# and this function is called once per point info fetch
self._prepareTimeCache(src=src, maxTime=miscParamMap['time'])
self._prepareTimeCache(src=src, maxTime=miscParams['time'])
return {
'applyProjected': GraphSettings.getInstance().get('applyProjected'),
'miscParamMap': miscParamMap,
'dmgMap': self._getDamagePerKey(src=src, time=miscParamMap['time']),
'dmgMap': self._getDamagePerKey(src=src, time=miscParams['time']),
'tgtResists': tgt.getResists()}
def _calculatePoint(self, x, miscParams, src, tgt, commonData):
tgtSpeed = x
miscParamMap = commonData['miscParamMap']
tgtSigRadius = tgt.getSigRadius()
if commonData['applyProjected']:
webMods, tpMods = self.graph._projectedCache.getProjModData(src)
@@ -323,7 +313,7 @@ class XTgtSpeedMixin(SmoothPointGetter):
webMods=webMods,
webDrones=webDrones,
webFighters=webFighters,
distance=miscParamMap['distance'])
distance=miscParams['distance'])
tgtSigRadius = tgtSigRadius * getTpMult(
src=src,
tgt=tgt,
@@ -331,15 +321,15 @@ class XTgtSpeedMixin(SmoothPointGetter):
tpMods=tpMods,
tpDrones=tpDrones,
tpFighters=tpFighters,
distance=miscParamMap['distance'])
distance=miscParams['distance'])
applicationMap = getApplicationPerKey(
src=src,
tgt=tgt,
atkSpeed=miscParamMap['atkSpeed'],
atkAngle=miscParamMap['atkAngle'],
distance=miscParamMap['distance'],
atkSpeed=miscParams['atkSpeed'],
atkAngle=miscParams['atkAngle'],
distance=miscParams['distance'],
tgtSpeed=tgtSpeed,
tgtAngle=miscParamMap['tgtAngle'],
tgtAngle=miscParams['tgtAngle'],
tgtSigRadius=tgtSigRadius)
y = applyDamage(
dmgMap=commonData['dmgMap'],
@@ -354,9 +344,7 @@ class XTgtSigRadiusMixin(SmoothPointGetter):
_extraDepth = 2
def _getCommonData(self, miscParams, src, tgt):
# Process params into more convenient form
miscParamMap = dict(miscParams)
tgtSpeed = miscParamMap['tgtSpeed']
tgtSpeed = miscParams['tgtSpeed']
tgtSigMult = 1
if GraphSettings.getInstance().get('applyProjected'):
webMods, tpMods = self.graph._projectedCache.getProjModData(src)
@@ -369,7 +357,7 @@ class XTgtSigRadiusMixin(SmoothPointGetter):
webMods=webMods,
webDrones=webDrones,
webFighters=webFighters,
distance=miscParamMap['distance'])
distance=miscParams['distance'])
tgtSigMult = getTpMult(
src=src,
tgt=tgt,
@@ -377,28 +365,26 @@ class XTgtSigRadiusMixin(SmoothPointGetter):
tpMods=tpMods,
tpDrones=tpDrones,
tpFighters=tpFighters,
distance=miscParamMap['distance'])
distance=miscParams['distance'])
# Prepare time cache here because we need to do it only once,
# and this function is called once per point info fetch
self._prepareTimeCache(src=src, maxTime=miscParamMap['time'])
self._prepareTimeCache(src=src, maxTime=miscParams['time'])
return {
'miscParamMap': miscParamMap,
'tgtSpeed': tgtSpeed,
'tgtSigMult': tgtSigMult,
'dmgMap': self._getDamagePerKey(src=src, time=miscParamMap['time']),
'dmgMap': self._getDamagePerKey(src=src, time=miscParams['time']),
'tgtResists': tgt.getResists()}
def _calculatePoint(self, x, miscParams, src, tgt, commonData):
tgtSigRadius = x
miscParamMap = commonData['miscParamMap']
applicationMap = getApplicationPerKey(
src=src,
tgt=tgt,
atkSpeed=miscParamMap['atkSpeed'],
atkAngle=miscParamMap['atkAngle'],
distance=miscParamMap['distance'],
atkSpeed=miscParams['atkSpeed'],
atkAngle=miscParams['atkAngle'],
distance=miscParams['distance'],
tgtSpeed=commonData['tgtSpeed'],
tgtAngle=miscParamMap['tgtAngle'],
tgtAngle=miscParams['tgtAngle'],
tgtSigRadius=tgtSigRadius * commonData['tgtSigMult'])
y = applyDamage(
dmgMap=commonData['dmgMap'],

View File

@@ -31,7 +31,7 @@ class Distance2WebbingStrengthGetter(SmoothPointGetter):
_extraDepth = 2
def _getCommonData(self, miscParams, src, tgt):
resist = dict(miscParams)['resist'] or 0
resist = miscParams['resist'] or 0
webs = []
for mod in src.item.modules:
if mod.state <= FittingModuleState.ONLINE: