diff --git a/gui/builtinGraphs/fitDamageStats/calc.py b/gui/builtinGraphs/fitDamageStats/calc.py index fe7dc1124..14b22ce4a 100644 --- a/gui/builtinGraphs/fitDamageStats/calc.py +++ b/gui/builtinGraphs/fitDamageStats/calc.py @@ -19,6 +19,7 @@ import math +from functools import lru_cache def getTurretMult(mod, fit, tgt, atkSpeed, atkAngle, distance, tgtSpeed, tgtAngle, tgtSigRadius): @@ -115,6 +116,7 @@ def getFighterAbilityMult(fighter, ability, fit, distance, tgtSpeed, tgtSigRadiu # Turret-specific +@lru_cache(maxsize=50) def _calcTurretMult(chanceToHit): """Calculate damage multiplier for turret-based weapons.""" # https://wiki.eveuniversity.org/Turret_mechanics#Damage @@ -130,6 +132,7 @@ def _calcTurretMult(chanceToHit): return totalMult +@lru_cache(maxsize=1000) def _calcTurretChanceToHit( atkSpeed, atkAngle, atkRadius, atkOptimalRange, atkFalloffRange, atkTracking, atkOptimalSigRadius, distance, tgtSpeed, tgtAngle, tgtRadius, tgtSigRadius @@ -163,6 +166,7 @@ def _calcTrackingFactor(atkTracking, atkOptimalSigRadius, angularSpeed, tgtSigRa # Missile-specific +@lru_cache(maxsize=200) def _calcMissileMult(atkRadius, atkRange, atkEr, atkEv, atkDrf, distance, tgtSpeed, tgtSigRadius): """Calculate damage multiplier for missile launcher.""" # Missiles spawn in the center of the attacking ship @@ -173,6 +177,7 @@ def _calcMissileMult(atkRadius, atkRange, atkEr, atkEv, atkDrf, distance, tgtSpe return mult +@lru_cache(maxsize=200) def _calcFighterMult(atkOptimalRange, atkFalloffRange, atkEr, atkEv, atkDrf, distance, tgtSpeed, tgtSigRadius): """Calculate damage multiplier for separate fighter ability,""" rangeFactor = _calcRangeFactor(atkOptimalRange, atkFalloffRange, distance) diff --git a/gui/builtinGraphs/fitDamageStats/graph.py b/gui/builtinGraphs/fitDamageStats/graph.py index 748f21db7..1e7016b9b 100644 --- a/gui/builtinGraphs/fitDamageStats/graph.py +++ b/gui/builtinGraphs/fitDamageStats/graph.py @@ -103,6 +103,21 @@ class FitDamageStatsGraph(FitGraph): distance=distance, tgtSpeed=miscInputMap['tgtSpeed'], tgtSigRadius=tgtSigRad) + for drone in fit.drones: + if not drone.isDealingDamage(): + continue + droneDps = drone.getDps().total + totalDps += droneDps * getDroneMult( + drone=drone, + fit=fit, + tgt=tgt, + atkSpeed=miscInputMap['atkSpeed'], + atkAngle=miscInputMap['atkAngle'], + distance=distance, + tgtSpeed=miscInputMap['tgtSpeed'], + tgtAngle=miscInputMap['tgtAngle'], + tgtSigRadius=tgtSigRad) + xs.append(distance) ys.append(totalDps) return xs, ys