From 5fdae11bb13ddb06ef62be4f51238de5e5e11073 Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Tue, 11 Dec 2018 19:13:31 +0300 Subject: [PATCH] Expose damage output composition to UI --- eos/saveddata/fit.py | 21 +++++++++-------- eos/utils/stats.py | 27 ++++++++++++++-------- gui/builtinStatsViews/firepowerViewFull.py | 24 +++++++++---------- service/port/efs.py | 6 ++--- 4 files changed, 44 insertions(+), 34 deletions(-) diff --git a/eos/saveddata/fit.py b/eos/saveddata/fit.py index a24a3b77e..a42a75008 100644 --- a/eos/saveddata/fit.py +++ b/eos/saveddata/fit.py @@ -34,6 +34,7 @@ from eos.saveddata.drone import Drone from eos.saveddata.character import Character from eos.saveddata.citadel import Citadel from eos.saveddata.module import Module, State, Slot, Hardpoint +from eos.utils.stats import DmgTypes from logbook import Logger pyfalog = Logger(__name__) @@ -1529,27 +1530,27 @@ class Fit(object): self.__droneYield = droneYield def calculateWeaponDmgStats(self, spoolType, spoolAmount): - weaponVolley = 0 - weaponDps = 0 + weaponVolley = DmgTypes(0, 0, 0, 0) + weaponDps = DmgTypes(0, 0, 0, 0) for mod in self.modules: - weaponVolley += mod.getVolley(spoolType=spoolType, spoolAmount=spoolAmount, targetResists=self.targetResists).total - weaponDps += mod.getDps(spoolType=spoolType, spoolAmount=spoolAmount, targetResists=self.targetResists).total + weaponVolley += mod.getVolley(spoolType=spoolType, spoolAmount=spoolAmount, targetResists=self.targetResists) + weaponDps += mod.getDps(spoolType=spoolType, spoolAmount=spoolAmount, targetResists=self.targetResists) self.__weaponVolleyMap[(spoolType, spoolAmount)] = weaponVolley self.__weaponDpsMap[(spoolType, spoolAmount)] = weaponDps def calculateDroneDmgStats(self): - droneVolley = 0 - droneDps = 0 + droneVolley = DmgTypes(0, 0, 0, 0) + droneDps = DmgTypes(0, 0, 0, 0) for drone in self.drones: - droneVolley += drone.getVolley(targetResists=self.targetResists).total - droneDps += drone.getDps(targetResists=self.targetResists).total + droneVolley += drone.getVolley(targetResists=self.targetResists) + droneDps += drone.getDps(targetResists=self.targetResists) for fighter in self.fighters: - droneVolley += fighter.getVolley(targetResists=self.targetResists).total - droneDps += fighter.getDps(targetResists=self.targetResists).total + droneVolley += fighter.getVolley(targetResists=self.targetResists) + droneDps += fighter.getDps(targetResists=self.targetResists) self.__droneDps = droneDps self.__droneVolley = droneVolley diff --git a/eos/utils/stats.py b/eos/utils/stats.py index fe1b392f4..cec0a2bdd 100644 --- a/eos/utils/stats.py +++ b/eos/utils/stats.py @@ -26,7 +26,7 @@ class DmgTypes: self.thermal = thermal self.kinetic = kinetic self.explosive = explosive - self.total = em + thermal + kinetic + explosive + self._calcTotal() # Iterator is needed to support tuple-style unpacking def __iter__(self): @@ -51,11 +51,20 @@ class DmgTypes: self.em, self.thermal, self.kinetic, self.explosive, self.total)) - def __hash__(self): - return hash(( - DmgTypes.__qualname__, - self.em, - self.thermal, - self.kinetic, - self.explosive, - self.total)) + def _calcTotal(self): + self.total = self.em + self.thermal + self.kinetic + self.explosive + + def __add__(self, other): + return type(self)( + em=self.em + other.em, + thermal=self.thermal + other.thermal, + kinetic=self.kinetic + other.kinetic, + explosive=self.explosive + other.explosive) + + def __iadd__(self, other): + self.em += other.em + self.thermal += other.thermal + self.kinetic += other.kinetic + self.explosive += other.explosive + self._calcTotal() + return self diff --git a/gui/builtinStatsViews/firepowerViewFull.py b/gui/builtinStatsViews/firepowerViewFull.py index ba3891c82..9ca523e2b 100644 --- a/gui/builtinStatsViews/firepowerViewFull.py +++ b/gui/builtinStatsViews/firepowerViewFull.py @@ -161,27 +161,27 @@ class FirepowerViewFull(StatsView): stats = ( ( "labelFullDpsWeapon", - lambda: fit.getWeaponDps(), - lambda: fit.getWeaponDps(spoolType=SpoolType.SCALE, spoolAmount=0), - lambda: fit.getWeaponDps(spoolType=SpoolType.SCALE, spoolAmount=1), + lambda: fit.getWeaponDps().total, + lambda: fit.getWeaponDps(spoolType=SpoolType.SCALE, spoolAmount=0).total, + lambda: fit.getWeaponDps(spoolType=SpoolType.SCALE, spoolAmount=1).total, 3, 0, 0, "%s DPS", "DPS"), ( "labelFullDpsDrone", - lambda: fit.getDroneDps(), - lambda: fit.getDroneDps(), - lambda: fit.getDroneDps(), + lambda: fit.getDroneDps().total, + lambda: fit.getDroneDps().total, + lambda: fit.getDroneDps().total, 3, 0, 0, "%s DPS", "DPS"), ( "labelFullVolleyTotal", - lambda: fit.getTotalVolley(), - lambda: fit.getTotalVolley(spoolType=SpoolType.SCALE, spoolAmount=0), - lambda: fit.getTotalVolley(spoolType=SpoolType.SCALE, spoolAmount=1), + lambda: fit.getTotalVolley().total, + lambda: fit.getTotalVolley(spoolType=SpoolType.SCALE, spoolAmount=0).total, + lambda: fit.getTotalVolley(spoolType=SpoolType.SCALE, spoolAmount=1).total, 3, 0, 0, "%s", "volley"), ( "labelFullDpsTotal", - lambda: fit.getTotalDps(), - lambda: fit.getTotalDps(spoolType=SpoolType.SCALE, spoolAmount=0), - lambda: fit.getTotalDps(spoolType=SpoolType.SCALE, spoolAmount=1), + lambda: fit.getTotalDps().total, + lambda: fit.getTotalDps(spoolType=SpoolType.SCALE, spoolAmount=0).total, + lambda: fit.getTotalDps(spoolType=SpoolType.SCALE, spoolAmount=1).total, 3, 0, 0, "%s", "DPS")) counter = 0 diff --git a/service/port/efs.py b/service/port/efs.py index 9ad5b5d6c..1f0ace9e7 100755 --- a/service/port/efs.py +++ b/service/port/efs.py @@ -623,11 +623,11 @@ class EfsPort(): shipSize = EfsPort.getShipSize(fit.ship.item.groupID) try: dataDict = { - "name": fitName, "ehp": fit.ehp, "droneDPS": fit.getDroneDps(), + "name": fitName, "ehp": fit.ehp, "droneDPS": fit.getDroneDps().total, "droneVolley": fit.getDroneVolley(), "hp": fit.hp, "maxTargets": fit.maxTargets, - "maxSpeed": fit.maxSpeed, "weaponVolley": fit.getWeaponVolley(), "totalVolley": fit.getTotalVolley(), + "maxSpeed": fit.maxSpeed, "weaponVolley": fit.getWeaponVolley().total, "totalVolley": fit.getTotalVolley().total, "maxTargetRange": fit.maxTargetRange, "scanStrength": fit.scanStrength, - "weaponDPS": fit.getWeaponDps(), "alignTime": fit.alignTime, "signatureRadius": fitModAttr("signatureRadius"), + "weaponDPS": fit.getWeaponDps().total, "alignTime": fit.alignTime, "signatureRadius": fitModAttr("signatureRadius"), "weapons": weaponSystems, "scanRes": fitModAttr("scanResolution"), "capUsed": fit.capUsed, "capRecharge": fit.capRecharge, "rigSlots": fitModAttr("rigSlots"), "lowSlots": fitModAttr("lowSlots"),