Add regular and guided bombs to graphs

This commit is contained in:
DarkPhoenix
2019-07-04 19:14:46 +03:00
parent 417e478d27
commit 78b6eb4283
2 changed files with 59 additions and 12 deletions

View File

@@ -55,6 +55,49 @@ def getLauncherMult(mod, fit, distance, tgtSpeed, tgtSigRadius):
return mult
def getSmartbombMult(mod, distance):
modRange = mod.maxRange
if modRange is None:
return 0
if distance > modRange:
return 0
return 1
def getBombMult(mod, fit, tgt, distance, tgtSigRadius):
modRange = mod.maxRange
if modRange is None:
return 0
blastRadius = mod.getModifiedChargeAttr('explosionRange')
atkRadius = fit.ship.getModifiedItemAttr('radius')
tgtRadius = tgt.ship.getModifiedItemAttr('radius')
# Bomb starts in the center of the ship
# Also here we assume that it affects target as long as blast
# touches its surface, not center - I did not check this
if distance < max(0, modRange - atkRadius - tgtRadius - blastRadius):
return 0
if distance > max(0, modRange - atkRadius + tgtRadius + blastRadius):
return 0
eR = mod.getModifiedChargeAttr('aoeCloudSize')
if eR == 0:
return 1
else:
return min(1, tgtSigRadius / eR)
def getGuidedBombMult(mod, fit, distance, tgtSigRadius):
modRange = mod.maxRange
if modRange is None:
return 0
if distance > modRange - fit.ship.getModifiedItemAttr('radius'):
return 0
eR = mod.getModifiedChargeAttr('aoeCloudSize')
if eR == 0:
return 1
else:
return min(1, tgtSigRadius / eR)
def getDroneMult(drone, fit, tgt, atkSpeed, atkAngle, distance, tgtSpeed, tgtAngle, tgtSigRadius):
if distance > fit.extraAttributes['droneControlRange']:
return 0
@@ -114,15 +157,6 @@ def getFighterAbilityMult(fighter, ability, fit, distance, tgtSpeed, tgtSigRadiu
return mult
def getSmartbombMult(mod, distance):
modRange = mod.maxRange
if modRange is None:
return 0
if distance > modRange:
return 0
return 1
# Turret-specific
@lru_cache(maxsize=50)
def _calcTurretMult(chanceToHit):

View File

@@ -23,7 +23,7 @@ from eos.const import FittingHardpoint
from eos.utils.spoolSupport import SpoolType, SpoolOptions
from eos.utils.stats import DmgTypes
from gui.builtinGraphs.base import FitGraph, XDef, YDef, Input, VectorDef
from .calc import getTurretMult, getLauncherMult, getDroneMult, getFighterAbilityMult, getSmartbombMult
from .calc import getTurretMult, getLauncherMult, getDroneMult, getFighterAbilityMult, getSmartbombMult, getBombMult, getGuidedBombMult
from .timeCache import TimeCache
@@ -351,10 +351,23 @@ class FitDamageStatsGraph(FitGraph):
distance=distance,
tgtSpeed=tgtSpeed,
tgtSigRadius=tgtSigRadius)
elif mod.item.group.name == 'Smart Bomb':
elif mod.item.group.name in ('Smart Bomb', 'Structure Area Denial Module'):
applicationMap[mod] = getSmartbombMult(
mod=mod,
distance=distance)
elif mod.item.group.name == 'Missile Launcher Bomb':
applicationMap[mod] = getBombMult(
mod=mod,
fit=fit,
tgt=tgt,
distance=distance,
tgtSigRadius=tgtSigRadius)
elif mod.item.group.name == 'Structure Guided Bomb Launcher':
applicationMap[mod] = getGuidedBombMult(
mod=mod,
fit=fit,
distance=distance,
tgtSigRadius=tgtSigRadius)
for drone in fit.drones:
if not drone.isDealingDamage():
continue
@@ -387,7 +400,7 @@ class FitDamageStatsGraph(FitGraph):
def _aggregate(self, dmgMap, applicationMap):
total = DmgTypes(0, 0, 0, 0)
for key, dmg in dmgMap.items():
total += dmg * applicationMap.get(key, 1)
total += dmg * applicationMap.get(key, 0)
return total