From 5a0670838d8cd9b6cc4fdff6753e08dda9f3b0ff Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Tue, 11 Dec 2018 23:15:46 +0300 Subject: [PATCH] Expose spooled up value to stats panels --- eos/saveddata/drone.py | 36 +++++- eos/saveddata/fighterAbility.py | 18 +-- eos/saveddata/fit.py | 111 ++++--------------- eos/saveddata/module.py | 65 +++++++++-- gui/builtinStatsViews/firepowerViewFull.py | 18 +-- gui/builtinStatsViews/outgoingViewFull.py | 55 ++++++--- gui/builtinStatsViews/outgoingViewMinimal.py | 55 ++++++--- 7 files changed, 203 insertions(+), 155 deletions(-) diff --git a/eos/saveddata/drone.py b/eos/saveddata/drone.py index a1951d2f2..0002797f1 100644 --- a/eos/saveddata/drone.py +++ b/eos/saveddata/drone.py @@ -67,6 +67,7 @@ class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): """ Build object. Assumes proper and valid item already set """ self.__charge = None self.__baseVolley = None + self.__baseRemoteReps = None self.__miningyield = None self.__itemModifiedAttributes = ModifiedAttributeDict() self.__itemModifiedAttributes.original = self.__item.attributes @@ -125,12 +126,12 @@ class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): return DmgTypes(0, 0, 0, 0) if self.__baseVolley is None: dmgGetter = self.getModifiedChargeAttr if self.hasAmmo else self.getModifiedItemAttr - dmgMult = self.amountActive * (self.getModifiedItemAttr("damageMultiplier") or 1) + dmgMult = self.amountActive * (self.getModifiedItemAttr("damageMultiplier", 1)) self.__baseVolley = DmgTypes( - em=(dmgGetter("emDamage") or 0) * dmgMult, - thermal=(dmgGetter("thermalDamage") or 0) * dmgMult, - kinetic=(dmgGetter("kineticDamage") or 0) * dmgMult, - explosive=(dmgGetter("explosiveDamage") or 0) * dmgMult) + em=(dmgGetter("emDamage", 0)) * dmgMult, + thermal=(dmgGetter("thermalDamage", 0)) * dmgMult, + kinetic=(dmgGetter("kineticDamage", 0)) * dmgMult, + explosive=(dmgGetter("explosiveDamage", 0)) * dmgMult) volley = DmgTypes( em=self.__baseVolley.em * (1 - getattr(targetResists, "emAmount", 0)), thermal=self.__baseVolley.thermal * (1 - getattr(targetResists, "thermalAmount", 0)), @@ -152,6 +153,30 @@ class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): explosive=volley.explosive * dpsFactor) return dps + def getRemoteReps(self): + if self.amountActive <= 0: + return (None, 0) + if self.__baseRemoteReps is None: + droneShield = self.getModifiedItemAttr("shieldBonus", 0) + droneArmor = self.getModifiedItemAttr("armorDamageAmount", 0) + droneHull = self.getModifiedItemAttr("structureDamageAmount", 0) + if droneShield: + rrType = "Shield" + rrAmount = droneShield + elif droneArmor: + rrType = "Armor" + rrAmount = droneArmor + elif droneHull: + rrType = "Hull" + rrAmount = droneHull + else: + rrType = None + rrAmount = 0 + if rrAmount: + rrAmount *= self.amountActive / (self.cycleTime / 1000) + self.__baseRemoteReps = (rrType, rrAmount) + return self.__baseRemoteReps + def changeType(self, typeID): self.itemID = typeID self.init() @@ -214,6 +239,7 @@ class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): def clear(self): self.__baseVolley = None + self.__baseRemoteReps = None self.__miningyield = None self.itemModifiedAttributes.clear() self.chargeModifiedAttributes.clear() diff --git a/eos/saveddata/fighterAbility.py b/eos/saveddata/fighterAbility.py index 533f40291..684ceec94 100644 --- a/eos/saveddata/fighterAbility.py +++ b/eos/saveddata/fighterAbility.py @@ -122,16 +122,16 @@ class FighterAbility(object): if not self.dealsDamage or not self.active: return DmgTypes(0, 0, 0, 0) if self.attrPrefix == "fighterAbilityLaunchBomb": - em = self.fighter.getModifiedChargeAttr("emDamage") or 0 - therm = self.fighter.getModifiedChargeAttr("thermalDamage") or 0 - kin = self.fighter.getModifiedChargeAttr("kineticDamage") or 0 - exp = self.fighter.getModifiedChargeAttr("explosiveDamage") or 0 + em = self.fighter.getModifiedChargeAttr("emDamage", 0) + therm = self.fighter.getModifiedChargeAttr("thermalDamage", 0) + kin = self.fighter.getModifiedChargeAttr("kineticDamage", 0) + exp = self.fighter.getModifiedChargeAttr("explosiveDamage", 0) else: - em = self.fighter.getModifiedItemAttr("{}DamageEM".format(self.attrPrefix)) or 0 - therm = self.fighter.getModifiedItemAttr("{}DamageTherm".format(self.attrPrefix)) or 0 - kin = self.fighter.getModifiedItemAttr("{}DamageKin".format(self.attrPrefix)) or 0 - exp = self.fighter.getModifiedItemAttr("{}DamageExp".format(self.attrPrefix)) or 0 - dmgMult = self.fighter.amountActive * (self.fighter.getModifiedItemAttr("{}DamageMultiplier".format(self.attrPrefix)) or 1) + em = self.fighter.getModifiedItemAttr("{}DamageEM".format(self.attrPrefix), 0) + therm = self.fighter.getModifiedItemAttr("{}DamageTherm".format(self.attrPrefix), 0) + kin = self.fighter.getModifiedItemAttr("{}DamageKin".format(self.attrPrefix), 0) + exp = self.fighter.getModifiedItemAttr("{}DamageExp".format(self.attrPrefix), 0) + dmgMult = self.fighter.amountActive * self.fighter.getModifiedItemAttr("{}DamageMultiplier".format(self.attrPrefix), 1) volley = DmgTypes( em=em * dmgMult * (1 - getattr(targetResists, "emAmount", 0)), thermal=therm * dmgMult * (1 - getattr(targetResists, "thermalAmount", 0)), diff --git a/eos/saveddata/fit.py b/eos/saveddata/fit.py index a42a75008..2631edd17 100644 --- a/eos/saveddata/fit.py +++ b/eos/saveddata/fit.py @@ -123,6 +123,7 @@ class Fit(object): self.__ehp = None self.__weaponDpsMap = {} self.__weaponVolleyMap = {} + self.__remoteRepMap = {} self.__minerYield = None self.__droneDps = None self.__droneVolley = None @@ -136,12 +137,6 @@ class Fit(object): self.__capUsed = None self.__capRecharge = None self.__calculatedTargets = [] - self.__remoteReps = { - "Armor" : None, - "Shield" : None, - "Hull" : None, - "Capacitor": None, - } self.factorReload = False self.boostsFits = set() self.gangBoosts = None @@ -402,6 +397,7 @@ class Fit(object): self.__effectiveTank = None self.__weaponDpsMap = {} self.__weaponVolleyMap = {} + self.__remoteRepMap = {} self.__minerYield = None self.__effectiveSustainableTank = None self.__sustainableTank = None @@ -417,9 +413,6 @@ class Fit(object): self.ecmProjectedStr = 1 # self.commandBonuses = {} - for remoterep_type in self.__remoteReps: - self.__remoteReps[remoterep_type] = None - del self.__calculatedTargets[:] del self.__extraDrains[:] @@ -1368,93 +1361,27 @@ class Fit(object): self.__capStable = True self.__capState = 100 - @property - def remoteReps(self): - force_recalc = False - for remote_type in self.__remoteReps: - if self.__remoteReps[remote_type] is None: - force_recalc = True - break + def getRemoteReps(self, spoolType=None, spoolAmount=None): + if (spoolType, spoolAmount) not in self.__remoteRepMap: + remoteReps = {} - if force_recalc is False: - return self.__remoteReps + for module in self.modules: + rrType, rrAmount = module.getRemoteReps(spoolType=spoolType, spoolAmount=spoolAmount) + if rrType: + if rrType not in remoteReps: + remoteReps[rrType] = 0 + remoteReps[rrType] += rrAmount - # We are rerunning the recalcs. Explicitly set to 0 to make sure we don't duplicate anything and correctly set - # all values to 0. - for remote_type in self.__remoteReps: - self.__remoteReps[remote_type] = 0 + for drone in self.drones: + rrType, rrAmount = drone.getRemoteReps() + if rrType: + if rrType not in remoteReps: + remoteReps[rrType] = 0 + remoteReps[rrType] += rrAmount - for stuff in chain(self.modules, self.drones): - if stuff.item: - if stuff.item.ID == 10250: - pass - remote_type = None + self.__remoteRepMap[(spoolType, spoolAmount)] = remoteReps - # Only apply the charged multiplier if we have a charge in our ancil reppers (#1135) - if stuff.charge: - modifier = stuff.getModifiedItemAttr("chargedArmorDamageMultiplier", 1) - else: - modifier = 1 - - if isinstance(stuff, Module) and (stuff.isEmpty or stuff.state < State.ACTIVE): - continue - elif isinstance(stuff, Drone): - # drones don't have fueled charges, so simply override modifier with the amount of drones active - modifier = stuff.amountActive - - # Covert cycleTime to seconds - duration = stuff.cycleTime / 1000 - - # Skip modules with no duration. - if not duration: - continue - - remote_module_groups = { - "Remote Armor Repairer": "Armor", - "Ancillary Remote Armor Repairer": "Armor", - "Mutadaptive Remote Armor Repairer": "Armor", - "Remote Hull Repairer": "Hull", - "Remote Shield Booster": "Shield", - "Ancillary Remote Shield Booster": "Shield", - "Remote Capacitor Transmitter": "Capacitor", - } - - module_group = stuff.item.group.name - - if module_group in remote_module_groups: - remote_type = remote_module_groups[module_group] - elif not isinstance(stuff, Drone): - # Module isn't in our list of remote rep modules, bail - continue - - if remote_type == "Hull": - hp = stuff.getModifiedItemAttr("structureDamageAmount", 0) - elif remote_type == "Armor": - hp = stuff.getModifiedItemAttr("armorDamageAmount", 0) - elif remote_type == "Shield": - hp = stuff.getModifiedItemAttr("shieldBonus", 0) - elif remote_type == "Capacitor": - hp = stuff.getModifiedItemAttr("powerTransferAmount", 0) - else: - droneShield = stuff.getModifiedItemAttr("shieldBonus", 0) - droneArmor = stuff.getModifiedItemAttr("armorDamageAmount", 0) - droneHull = stuff.getModifiedItemAttr("structureDamageAmount", 0) - if droneShield: - remote_type = "Shield" - hp = droneShield - elif droneArmor: - remote_type = "Armor" - hp = droneArmor - elif droneHull: - remote_type = "Hull" - hp = droneHull - else: - hp = 0 - - if hp > 0 and duration > 0: - self.__remoteReps[remote_type] += (hp * modifier) / duration - - return self.__remoteReps + return self.__remoteRepMap[(spoolType, spoolAmount)] @property def hp(self): diff --git a/eos/saveddata/module.py b/eos/saveddata/module.py index 685fb8134..a3f4d81a0 100644 --- a/eos/saveddata/module.py +++ b/eos/saveddata/module.py @@ -171,6 +171,7 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): self.__charge = None self.__baseVolley = None + self.__baseRemoteReps = None self.__miningyield = None self.__reloadTime = None self.__reloadForce = None @@ -436,15 +437,15 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): return DmgTypes(0, 0, 0, 0) if self.__baseVolley is None: dmgGetter = self.getModifiedChargeAttr if self.charge else self.getModifiedItemAttr - dmgMult = self.getModifiedItemAttr("damageMultiplier") or 1 + dmgMult = self.getModifiedItemAttr("damageMultiplier", 1) self.__baseVolley = DmgTypes( - em=(dmgGetter("emDamage") or 0) * dmgMult, - thermal=(dmgGetter("thermalDamage") or 0) * dmgMult, - kinetic=(dmgGetter("kineticDamage") or 0) * dmgMult, - explosive=(dmgGetter("explosiveDamage") or 0) * dmgMult) + em=(dmgGetter("emDamage", 0)) * dmgMult, + thermal=(dmgGetter("thermalDamage", 0)) * dmgMult, + kinetic=(dmgGetter("kineticDamage", 0)) * dmgMult, + explosive=(dmgGetter("explosiveDamage", 0)) * dmgMult) spoolMultiplier = 1 + calculateSpoolup( - self.getModifiedItemAttr("damageMultiplierBonusMax") or 0, - self.getModifiedItemAttr("damageMultiplierBonusPerCycle") or 0, + self.getModifiedItemAttr("damageMultiplierBonusMax", 0), + self.getModifiedItemAttr("damageMultiplierBonusPerCycle", 0), self.cycleTime / 1000, spoolType if spoolType is not None else self.spoolType, # Using spool type as condition as it should define if we're using @@ -472,6 +473,55 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): explosive=volley.explosive * dpsFactor) return dps + def getRemoteReps(self, spoolType=None, spoolAmount=None): + if self.isEmpty or self.state < State.ACTIVE: + return (None, 0) + + def getBaseRemoteReps(module): + remoteModuleGroups = { + "Remote Armor Repairer": "Armor", + "Ancillary Remote Armor Repairer": "Armor", + "Mutadaptive Remote Armor Repairer": "Armor", + "Remote Hull Repairer": "Hull", + "Remote Shield Booster": "Shield", + "Ancillary Remote Shield Booster": "Shield", + "Remote Capacitor Transmitter": "Capacitor"} + rrType = remoteModuleGroups.get(module.item.group.name, None) + if not rrType: + return None, 0 + if rrType == "Hull": + rrAmount = module.getModifiedItemAttr("structureDamageAmount", 0) + elif rrType == "Armor": + rrAmount = module.getModifiedItemAttr("armorDamageAmount", 0) + elif rrType == "Shield": + rrAmount = module.getModifiedItemAttr("shieldBonus", 0) + elif rrType == "Capacitor": + rrAmount = module.getModifiedItemAttr("powerTransferAmount", 0) + else: + return None, 0 + if rrAmount: + rrAmount *= 1 / (self.cycleTime / 1000) + if module.item.group.name == "Ancillary Remote Armor Repairer" and module.charge: + rrAmount *= module.getModifiedItemAttr("chargedArmorDamageMultiplier", 1) + + return rrType, rrAmount + + if self.__baseRemoteReps is None: + self.__baseRemoteReps = getBaseRemoteReps(self) + + rrType, rrAmount = self.__baseRemoteReps + if rrType and rrAmount and self.item.group.name == "Mutadaptive Remote Armor Repairer": + spoolMultiplier = 1 + calculateSpoolup( + self.getModifiedItemAttr("repairMultiplierBonusMax", 0), + self.getModifiedItemAttr("repairMultiplierBonusPerCycle", 0), + self.cycleTime / 1000, + spoolType if spoolType is not None else self.spoolType, + # Using spool type as condition as it should define if we're using + # passed spoolup parameters or not + spoolAmount if spoolType is not None else self.spoolAmount) + rrAmount *= spoolMultiplier + return rrType, rrAmount + @property def reloadTime(self): # Get reload time from attrs first, then use @@ -724,6 +774,7 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): def clear(self): self.__baseVolley = None + self.__baseRemoteReps = None self.__miningyield = None self.__reloadTime = None self.__reloadForce = None diff --git a/gui/builtinStatsViews/firepowerViewFull.py b/gui/builtinStatsViews/firepowerViewFull.py index d1d6da9e8..93de4dd4a 100644 --- a/gui/builtinStatsViews/firepowerViewFull.py +++ b/gui/builtinStatsViews/firepowerViewFull.py @@ -153,7 +153,7 @@ class FirepowerViewFull(StatsView): if preSpool == postSpool: return None else: - return "Spoolup {} spread: {}-{}".format( + return "Spoolup {}: {}-{}".format( statName, formatAmount(preSpool, *fmt_options), formatAmount(postSpool, *fmt_options)) @@ -161,7 +161,7 @@ class FirepowerViewFull(StatsView): stats = ( ( "labelFullDpsWeapon", - lambda: fit.getWeaponDps(spoolType=SpoolType.SCALE, spoolAmount=1).total, + 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"), @@ -173,27 +173,29 @@ class FirepowerViewFull(StatsView): 3, 0, 0, "%s DPS", "DPS"), ( "labelFullVolleyTotal", - lambda: fit.getTotalVolley(spoolType=SpoolType.SCALE, spoolAmount=1).total, + 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(spoolType=SpoolType.SCALE, spoolAmount=1).total, + 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 - for labelName, val, preSpoolVal, postSpoolVal, prec, lowest, highest, valueFormat, statName in stats: + for labelName, val, preSpoolVal, fullSpoolVal, prec, lowest, highest, valueFormat, statName in stats: label = getattr(self, labelName) - preSpoolVal = preSpoolVal() if fit is not None else 0 - postSpoolVal = postSpoolVal() if fit is not None else 0 val = val() if fit is not None else 0 + preSpoolVal = preSpoolVal() if fit is not None else 0 + fullSpoolVal = fullSpoolVal() if fit is not None else 0 + # TODO: temporary override, should be removed when spoolup settings are implemented + val = fullSpoolVal if self._cachedValues[counter] != val: valueStr = formatAmount(val, prec, lowest, highest) label.SetLabel(valueFormat % valueStr) - valueStrTooltip = dpsToolTip(preSpoolVal, postSpoolVal, statName, (prec, lowest, highest)) + valueStrTooltip = dpsToolTip(preSpoolVal, fullSpoolVal, statName, (prec, lowest, highest)) if valueStrTooltip: label.SetToolTip(wx.ToolTip(valueStrTooltip)) self._cachedValues[counter] = val diff --git a/gui/builtinStatsViews/outgoingViewFull.py b/gui/builtinStatsViews/outgoingViewFull.py index be24ee6af..8ec6425b5 100644 --- a/gui/builtinStatsViews/outgoingViewFull.py +++ b/gui/builtinStatsViews/outgoingViewFull.py @@ -22,6 +22,7 @@ import wx from gui.statsView import StatsView from gui.bitmap_loader import BitmapLoader from gui.utils.numberFormatter import formatAmount +from eos.utils.spoolSupport import SpoolType class OutgoingViewFull(StatsView): @@ -51,10 +52,10 @@ class OutgoingViewFull(StatsView): counter = 0 rr_list = [ - ("RemoteCapacitor", "Capacitor:", "capacitorInfo", "Capacitor GJ/s per second transferred remotely."), - ("RemoteShield", "Shield:", "shieldActive", "Shield hitpoints per second repaired remotely."), - ("RemoteArmor", "Armor:", "armorActive", "Armor hitpoints per second repaired remotely."), - ("RemoteHull", "Hull:", "hullActive", "Hull hitpoints per second repaired remotely."), + ("RemoteCapacitor", "Capacitor:", "capacitorInfo", "Capacitor GJ per second restored remotely"), + ("RemoteShield", "Shield:", "shieldActive", "Shield HP per second repaired remotely"), + ("RemoteArmor", "Armor:", "armorActive", "Armor HP per second repaired remotely"), + ("RemoteHull", "Hull:", "hullActive", "Hull HP per second repaired remotely"), ] for outgoingType, label, image, tooltip in rr_list: @@ -81,23 +82,43 @@ class OutgoingViewFull(StatsView): # If we did anything intresting, we'd update our labels to reflect the new fit's stats here stats = [ - ("labelRemoteArmor", lambda: fit.remoteReps["Armor"], 3, 0, 0, "%s HP/s", None), - ("labelRemoteShield", lambda: fit.remoteReps["Shield"], 3, 0, 0, "%s HP/s", None), - ("labelRemoteHull", lambda: fit.remoteReps["Hull"], 3, 0, 0, "%s HP/s", None), - ("labelRemoteCapacitor", lambda: fit.remoteReps["Capacitor"], 3, 0, 0, "%s GJ/s", None), - ] + ( + "labelRemoteArmor", + lambda: fit.getRemoteReps().get("Armor"), + lambda: fit.getRemoteReps(spoolType=SpoolType.SCALE, spoolAmount=0).get("Armor", 0), + lambda: fit.getRemoteReps(spoolType=SpoolType.SCALE, spoolAmount=1).get("Armor", 0), + 3, 0, 0, "%s HP/s", None), + ( + "labelRemoteShield", + lambda: fit.getRemoteReps().get("Shield"), + lambda: fit.getRemoteReps(spoolType=SpoolType.SCALE, spoolAmount=0).get("Shield", 0), + lambda: fit.getRemoteReps(spoolType=SpoolType.SCALE, spoolAmount=1).get("Shield", 0), + 3, 0, 0, "%s HP/s", None), + ( + "labelRemoteHull", + lambda: fit.getRemoteReps().get("Hull"), + lambda: fit.getRemoteReps(spoolType=SpoolType.SCALE, spoolAmount=0).get("Hull", 0), + lambda: fit.getRemoteReps(spoolType=SpoolType.SCALE, spoolAmount=1).get("Hull", 0), + 3, 0, 0, "%s HP/s", None), + ( + "labelRemoteCapacitor", + lambda: fit.getRemoteReps().get("Capacitor"), + lambda: fit.getRemoteReps(spoolType=SpoolType.SCALE, spoolAmount=0).get("Capacitor", 0), + lambda: fit.getRemoteReps(spoolType=SpoolType.SCALE, spoolAmount=1).get("Capacitor", 0), + 3, 0, 0, "%s GJ/s", None)] counter = 0 - for labelName, value, prec, lowest, highest, valueFormat, altFormat in stats: + for labelName, val, preSpoolVal, fullSpoolVal, prec, lowest, highest, valueFormat, altFormat in stats: label = getattr(self, labelName) - value = value() if fit is not None else 0 - value = value if value is not None else 0 - if self._cachedValues[counter] != value: - valueStr = formatAmount(value, prec, lowest, highest) + val = val() if fit is not None else 0 + preSpoolVal = preSpoolVal() if fit is not None else 0 + fullSpoolVal = fullSpoolVal() if fit is not None else 0 + # TODO: temporary override, should be removed when spoolup settings are implemented + val = fullSpoolVal + if self._cachedValues[counter] != val: + valueStr = formatAmount(val, prec, lowest, highest) label.SetLabel(valueFormat % valueStr) - tipStr = valueFormat % valueStr if altFormat is None else altFormat % value - label.SetToolTip(wx.ToolTip(tipStr)) - self._cachedValues[counter] = value + self._cachedValues[counter] = val counter += 1 self.panel.Layout() self.headerPanel.Layout() diff --git a/gui/builtinStatsViews/outgoingViewMinimal.py b/gui/builtinStatsViews/outgoingViewMinimal.py index 21fe9bede..be27afc8c 100644 --- a/gui/builtinStatsViews/outgoingViewMinimal.py +++ b/gui/builtinStatsViews/outgoingViewMinimal.py @@ -21,6 +21,7 @@ import wx from gui.statsView import StatsView from gui.utils.numberFormatter import formatAmount +from eos.utils.spoolSupport import SpoolType class OutgoingViewMinimal(StatsView): @@ -50,10 +51,10 @@ class OutgoingViewMinimal(StatsView): counter = 0 rr_list = [ - ("RemoteCapacitor", "Capacitor:", "capacitorInfo", "Capacitor GJ/s per second transferred remotely."), - ("RemoteShield", "Shield:", "shieldActive", "Shield hitpoints per second repaired remotely."), - ("RemoteArmor", "Armor:", "armorActive", "Armor hitpoints per second repaired remotely."), - ("RemoteHull", "Hull:", "hullActive", "Hull hitpoints per second repaired remotely."), + ("RemoteCapacitor", "Capacitor:", "capacitorInfo", "Capacitor GJ per second restored remotely"), + ("RemoteShield", "Shield:", "shieldActive", "Shield HP per second repaired remotely"), + ("RemoteArmor", "Armor:", "armorActive", "Armor HP per second repaired remotely"), + ("RemoteHull", "Hull:", "hullActive", "Hull HP per second repaired remotely"), ] for outgoingType, label, image, tooltip in rr_list: @@ -80,23 +81,43 @@ class OutgoingViewMinimal(StatsView): # If we did anything intresting, we'd update our labels to reflect the new fit's stats here stats = [ - ("labelRemoteArmor", lambda: fit.remoteReps["Armor"], 3, 0, 0, "%s HP/s", None), - ("labelRemoteShield", lambda: fit.remoteReps["Shield"], 3, 0, 0, "%s HP/s", None), - ("labelRemoteHull", lambda: fit.remoteReps["Hull"], 3, 0, 0, "%s HP/s", None), - ("labelRemoteCapacitor", lambda: fit.remoteReps["Capacitor"], 3, 0, 0, "%s GJ/s", None), - ] + ( + "labelRemoteArmor", + lambda: fit.getRemoteReps().get("Armor"), + lambda: fit.getRemoteReps(spoolType=SpoolType.SCALE, spoolAmount=0).get("Armor", 0), + lambda: fit.getRemoteReps(spoolType=SpoolType.SCALE, spoolAmount=1).get("Armor", 0), + 3, 0, 0, "%s HP/s", None), + ( + "labelRemoteShield", + lambda: fit.getRemoteReps().get("Shield"), + lambda: fit.getRemoteReps(spoolType=SpoolType.SCALE, spoolAmount=0).get("Shield", 0), + lambda: fit.getRemoteReps(spoolType=SpoolType.SCALE, spoolAmount=1).get("Shield", 0), + 3, 0, 0, "%s HP/s", None), + ( + "labelRemoteHull", + lambda: fit.getRemoteReps().get("Hull"), + lambda: fit.getRemoteReps(spoolType=SpoolType.SCALE, spoolAmount=0).get("Hull", 0), + lambda: fit.getRemoteReps(spoolType=SpoolType.SCALE, spoolAmount=1).get("Hull", 0), + 3, 0, 0, "%s HP/s", None), + ( + "labelRemoteCapacitor", + lambda: fit.getRemoteReps().get("Capacitor"), + lambda: fit.getRemoteReps(spoolType=SpoolType.SCALE, spoolAmount=0).get("Capacitor", 0), + lambda: fit.getRemoteReps(spoolType=SpoolType.SCALE, spoolAmount=1).get("Capacitor", 0), + 3, 0, 0, "%s GJ/s", None)] counter = 0 - for labelName, value, prec, lowest, highest, valueFormat, altFormat in stats: + for labelName, val, preSpoolVal, fullSpoolVal, prec, lowest, highest, valueFormat, altFormat in stats: label = getattr(self, labelName) - value = value() if fit is not None else 0 - value = value if value is not None else 0 - if self._cachedValues[counter] != value: - valueStr = formatAmount(value, prec, lowest, highest) + val = val() if fit is not None else 0 + preSpoolVal = preSpoolVal() if fit is not None else 0 + fullSpoolVal = fullSpoolVal() if fit is not None else 0 + # TODO: temporary override, should be removed when spoolup settings are implemented + val = fullSpoolVal + if self._cachedValues[counter] != val: + valueStr = formatAmount(val, prec, lowest, highest) label.SetLabel(valueFormat % valueStr) - tipStr = valueFormat % valueStr if altFormat is None else altFormat % value - label.SetToolTip(wx.ToolTip(tipStr)) - self._cachedValues[counter] = value + self._cachedValues[counter] = val counter += 1 self.panel.Layout() self.headerPanel.Layout()