Plug webs/TPs into calculation process

This commit is contained in:
DarkPhoenix
2019-07-08 00:29:23 +03:00
parent 6786cc7eff
commit 04a74e278b
4 changed files with 27 additions and 20 deletions

View File

@@ -178,24 +178,24 @@ def applyWebs(tgt, currentUnwebbedSpeed, webMods, distance):
except ZeroDivisionError:
currentWebbedSpeed = 0
else:
appliedBoosts = []
for boost, optimal, falloff in webMods:
appliedMultipliers = {}
for boost, optimal, falloff, stackingChain in webMods:
appliedBoost = boost * _calcRangeFactor(atkOptimalRange=optimal, atkFalloffRange=falloff, distance=distance)
if appliedBoost:
appliedBoosts.append(appliedBoost)
webbedSpeed = tgt.ship.getModifiedItemAttrWithExtraMods('maxVelocity', boosts=appliedBoosts)
appliedMultipliers.setdefault(stackingChain, []).append(1 + appliedBoost / 100)
webbedSpeed = tgt.ship.getModifiedItemAttrWithExtraMods('maxVelocity', extraMultipliers=appliedMultipliers)
currentWebbedSpeed = webbedSpeed * speedRatio
return currentWebbedSpeed
def applyTps(tgt, tpMods, distance):
untpedSig = tgt.ship.getModifiedItemAttr('signatureRadius')
appliedBoosts = []
for boost, optimal, falloff in tpMods:
appliedMultipliers = {}
for boost, optimal, falloff, stackingChain in tpMods:
appliedBoost = boost * _calcRangeFactor(atkOptimalRange=optimal, atkFalloffRange=falloff, distance=distance)
if appliedBoost:
appliedBoosts.append(appliedBoost)
tpedSig = tgt.ship.getModifiedItemAttrWithExtraMods('signatureRadius', boosts=appliedBoosts)
appliedMultipliers.setdefault(stackingChain, []).append(1 + appliedBoost / 100)
tpedSig = tgt.ship.getModifiedItemAttrWithExtraMods('signatureRadius', extraMultipliers=appliedMultipliers)
mult = tpedSig / untpedSig
return mult

View File

@@ -27,13 +27,13 @@ class ProjectedDataCache(FitDataCache):
try:
projectedData = self._data[fit.ID]['modules']
except KeyError:
# Format of items for both: (boost strength, optimal, falloff)
# Format of items for both: (boost strength, optimal, falloff, stacking group)
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 or 0, mod.falloff or 0))
webMods.append((mod.getModifiedItemAttr('speedFactor'), mod.maxRange or 0, mod.falloff or 0, 'default'))
if 'remoteTargetPaintFalloff' in mod.item.effects or 'structureModuleEffectTargetPainter' in mod.item.effects:
tpMods.append((mod.getModifiedItemAttr('signatureRadiusBonus'), mod.maxRange or 0, mod.falloff or 0))
tpMods.append((mod.getModifiedItemAttr('signatureRadiusBonus'), mod.maxRange or 0, mod.falloff or 0, 'default'))
return projectedData