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

View File

@@ -24,6 +24,7 @@ import wx
import gui.display
import gui.globalEvents as GE
from gui.builtinShipBrowser.events import EVT_FIT_RENAMED
from service.const import GraphCacheCleanupReason
from service.fit import Fit
@@ -135,7 +136,7 @@ class BaseList(gui.display.Display):
self.fits.remove(fit)
self.update(self.fits)
for fit in fits:
self.graphFrame.clearCache(fitID=fit.ID)
self.graphFrame.clearCache(reason=GraphCacheCleanupReason.fitChanged, extraData=fit.ID)
self.graphFrame.draw()
def unbindExternalEvents(self):