diff --git a/eos/saveddata/drone.py b/eos/saveddata/drone.py index 3fac30257..9ee1758d7 100644 --- a/eos/saveddata/drone.py +++ b/eos/saveddata/drone.py @@ -82,7 +82,7 @@ class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut, Mu self.__baseVolley = None self.__baseRRAmount = None self.__miningYield = None - self.__miningWaste = None + self.__miningDrain = None self.__ehp = None self.__itemModifiedAttributes = ModifiedAttributeDict() self.__itemModifiedAttributes.original = self._item.attributes @@ -240,15 +240,15 @@ class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut, Mu if not ignoreState and self.amountActive <= 0: return 0 if self.__miningYield is None: - self.__miningYield, self.__miningWaste = self.__calculateMining() + self.__miningYield, self.__miningDrain = self.__calculateMining() return self.__miningYield - def getMiningWPS(self, ignoreState=False): + def getMiningDPS(self, ignoreState=False): if not ignoreState and self.amountActive <= 0: return 0 - if self.__miningWaste is None: - self.__miningYield, self.__miningWaste = self.__calculateMining() - return self.__miningWaste + if self.__miningDrain is None: + self.__miningYield, self.__miningDrain = self.__calculateMining() + return self.__miningDrain def __calculateMining(self): if self.mines is True: @@ -262,8 +262,8 @@ class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut, Mu yps = yield_ / (cycleTime / 1000.0) wasteChance = self.getModifiedItemAttr("miningWasteProbability") wasteMult = self.getModifiedItemAttr("miningWastedVolumeMultiplier") - wps = yps * max(0, min(1, wasteChance / 100)) * wasteMult - return yps, wps + dps = yps * (1 + max(0, min(1, wasteChance / 100)) * wasteMult) + return yps, dps else: return 0, 0 @@ -335,7 +335,7 @@ class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut, Mu self.__baseVolley = None self.__baseRRAmount = None self.__miningYield = None - self.__miningWaste = None + self.__miningDrain = None self.__ehp = None self.itemModifiedAttributes.clear() self.chargeModifiedAttributes.clear() diff --git a/eos/saveddata/fit.py b/eos/saveddata/fit.py index f5ff7ba1c..bf606e8cd 100644 --- a/eos/saveddata/fit.py +++ b/eos/saveddata/fit.py @@ -140,8 +140,8 @@ class Fit: self.__remoteRepMap = {} self.__minerYield = None self.__droneYield = None - self.__minerWaste = None - self.__droneWaste = None + self.__minerDrain = None + self.__droneDrain = None self.__droneDps = None self.__droneVolley = None self.__sustainableTank = None @@ -378,11 +378,11 @@ class Fit: return self.__minerYield @property - def minerWaste(self): - if self.__minerWaste is None: + def minerDrain(self): + if self.__minerDrain is None: self.calculatemining() - return self.__minerWaste + return self.__minerDrain @property def droneYield(self): @@ -392,19 +392,19 @@ class Fit: return self.__droneYield @property - def droneWaste(self): - if self.__droneWaste is None: + def droneDrain(self): + if self.__droneDrain is None: self.calculatemining() - return self.__droneWaste + return self.__droneDrain @property def totalYield(self): return self.droneYield + self.minerYield @property - def totalWaste(self): - return self.droneWaste + self.minerWaste + def totalDrain(self): + return self.droneDrain + self.minerDrain @property def maxTargets(self): @@ -518,8 +518,8 @@ class Fit: self.__remoteRepMap = {} self.__minerYield = None self.__droneYield = None - self.__minerWaste = None - self.__droneWaste = None + self.__minerDrain = None + self.__droneDrain = None self.__effectiveSustainableTank = None self.__sustainableTank = None self.__droneDps = None @@ -1734,21 +1734,21 @@ class Fit: def calculatemining(self): minerYield = 0 - minerWaste = 0 + minerDrain = 0 droneYield = 0 - droneWaste = 0 + droneDrain = 0 for mod in self.modules: minerYield += mod.getMiningYPS() - minerWaste += mod.getMiningWPS() + minerDrain += mod.getMiningDPS() for drone in self.drones: droneYield += drone.getMiningYPS() - droneWaste += drone.getMiningWPS() + droneDrain += drone.getMiningDPS() self.__minerYield = minerYield - self.__minerWaste = minerWaste + self.__minerDrain = minerDrain self.__droneYield = droneYield - self.__droneWaste = droneWaste + self.__droneDrain = droneDrain def calculateWeaponDmgStats(self, spoolOptions): weaponVolley = DmgTypes.default() diff --git a/eos/saveddata/module.py b/eos/saveddata/module.py index 1e2b4ecd7..99a9eaa61 100644 --- a/eos/saveddata/module.py +++ b/eos/saveddata/module.py @@ -127,7 +127,7 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut, M self.__baseVolley = None self.__baseRRAmount = None self.__miningYield = None - self.__miningWaste = None + self.__miningDrain = None self.__reloadTime = None self.__reloadForce = None self.__chargeCycles = None @@ -418,17 +418,17 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut, M if not ignoreState and self.state < FittingModuleState.ACTIVE: return 0 if self.__miningYield is None: - self.__miningYield, self.__miningWaste = self.__calculateMining() + self.__miningYield, self.__miningDrain = self.__calculateMining() return self.__miningYield - def getMiningWPS(self, ignoreState=False): + def getMiningDPS(self, ignoreState=False): if self.isEmpty: return 0 if not ignoreState and self.state < FittingModuleState.ACTIVE: return 0 - if self.__miningWaste is None: - self.__miningYield, self.__miningWaste = self.__calculateMining() - return self.__miningWaste + if self.__miningDrain is None: + self.__miningYield, self.__miningDrain = self.__calculateMining() + return self.__miningDrain def __calculateMining(self): yield_ = self.getModifiedItemAttr("miningAmount") @@ -443,11 +443,11 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut, M yps = 0 wasteChance = self.getModifiedItemAttr("miningWasteProbability") wasteMult = self.getModifiedItemAttr("miningWastedVolumeMultiplier") - wps = yps * max(0, min(1, wasteChance / 100)) * wasteMult + dps = yps * (1 + max(0, min(1, wasteChance / 100)) * wasteMult) critChance = self.getModifiedItemAttr("miningCritChance") critBonusMult = self.getModifiedItemAttr("miningCritBonusYield") yps += yps * critChance * critBonusMult - return yps, wps + return yps, dps def isDealingDamage(self, ignoreState=False): volleyParams = self.getVolleyParameters(ignoreState=ignoreState) @@ -897,7 +897,7 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut, M self.__baseVolley = None self.__baseRRAmount = None self.__miningYield = None - self.__miningWaste = None + self.__miningDrain = None self.__reloadTime = None self.__reloadForce = None self.__chargeCycles = None diff --git a/gui/builtinStatsViews/miningyieldViewFull.py b/gui/builtinStatsViews/miningyieldViewFull.py index fc3324e76..e304a4e8e 100644 --- a/gui/builtinStatsViews/miningyieldViewFull.py +++ b/gui/builtinStatsViews/miningyieldViewFull.py @@ -130,9 +130,9 @@ class MiningYieldViewFull(StatsView): def refreshPanel(self, fit): # If we did anything intresting, we'd update our labels to reflect the new fit's stats here - stats = (("labelFullminingyieldMiner", lambda: fit.minerYield, lambda: fit.minerWaste, 3, 0, 0, "{}{} m\u00B3/s", None), - ("labelFullminingyieldDrone", lambda: fit.droneYield, lambda: fit.droneWaste, 3, 0, 0, "{}{} m\u00B3/s", None), - ("labelFullminingyieldTotal", lambda: fit.totalYield, lambda: fit.totalWaste, 3, 0, 0, "{}{} m\u00B3/s", None)) + stats = (("labelFullminingyieldMiner", lambda: fit.minerYield, lambda: fit.minerDrain, 3, 0, 0, "{} m\u00B3/s", None), + ("labelFullminingyieldDrone", lambda: fit.droneYield, lambda: fit.droneDrain, 3, 0, 0, "{} m\u00B3/s", None), + ("labelFullminingyieldTotal", lambda: fit.totalYield, lambda: fit.totalDrain, 3, 0, 0, "{} m\u00B3/s", None)) def processValue(value): value = value() if fit is not None else 0 @@ -140,23 +140,26 @@ class MiningYieldViewFull(StatsView): return value counter = 0 - for labelName, yieldValue, wasteValue, prec, lowest, highest, valueFormat, altFormat in stats: + for labelName, yieldValue, drainValue, prec, lowest, highest, valueFormat, altFormat in stats: label = getattr(self, labelName) yieldValue = processValue(yieldValue) - wasteValue = processValue(wasteValue) - if self._cachedValues[counter] != (yieldValue, wasteValue): + drainValue = processValue(drainValue) + if self._cachedValues[counter] != (yieldValue, drainValue): + try: + efficiency = '{}%'.format(formatAmount(yieldValue / drainValue * 100, 4, 0, 0)) + except ZeroDivisionError: + efficiency = '0%' yps = formatAmount(yieldValue, prec, lowest, highest) yph = formatAmount(yieldValue * 3600, prec, lowest, highest) - wps = formatAmount(wasteValue, prec, lowest, highest) - wph = formatAmount(wasteValue * 3600, prec, lowest, highest) - wasteSuffix = '\u02b7' if wasteValue > 0 else '' - label.SetLabel(valueFormat.format(yps, wasteSuffix)) + dps = formatAmount(drainValue, prec, lowest, highest) + dph = formatAmount(drainValue * 3600, prec, lowest, highest) + label.SetLabel(valueFormat.format(yps)) tipLines = [] - tipLines.append("{} m\u00B3 mining yield per second ({} m\u00B3 per hour)".format(yps, yph)) - if wasteValue > 0: - tipLines.append("{} m\u00B3 mining waste per second ({} m\u00B3 per hour)".format(wps, wph)) + tipLines.append("{} m\u00B3 yield per second ({} m\u00B3 per hour)".format(yps, yph)) + tipLines.append("{} m\u00B3 drain per second ({} m\u00B3 per hour)".format(dps, dph)) + tipLines.append(f'{efficiency} efficiency') label.SetToolTip(wx.ToolTip('\n'.join(tipLines))) - self._cachedValues[counter] = (yieldValue, wasteValue) + self._cachedValues[counter] = (yieldValue, drainValue) counter += 1 self.panel.Layout() self.headerPanel.Layout() diff --git a/gui/builtinViewColumns/misc.py b/gui/builtinViewColumns/misc.py index 1b5efe265..0523c9a3a 100644 --- a/gui/builtinViewColumns/misc.py +++ b/gui/builtinViewColumns/misc.py @@ -27,6 +27,7 @@ from gui.viewColumn import ViewColumn from gui.bitmap_loader import BitmapLoader from gui.utils.numberFormatter import formatAmount from gui.utils.listFormatter import formatList +from eos.utils.float import floatUnerr from eos.utils.spoolSupport import SpoolType, SpoolOptions import eos.config @@ -547,18 +548,24 @@ class Miscellanea(ViewColumn): if not yps: return "", None yph = yps * 3600 - wps = stuff.getMiningWPS(ignoreState=True) - wph = wps * 3600 + dps = stuff.getMiningDPS(ignoreState=True) + dph = dps * 3600 + try: + efficiency = yps / dps + except ZeroDivisionError: + efficiency = 0 textParts = [] - textParts.append(formatAmount(yps, 3, 0, 3)) tipLines = [] + textParts.append('{} m\u00B3/s'.format(formatAmount(yps, 3, 0, 3))) tipLines.append("{} m\u00B3 mining yield per second ({} m\u00B3 per hour)".format( formatAmount(yps, 3, 0, 3), formatAmount(yph, 3, 0, 3))) - if wps > 0: - textParts.append(formatAmount(wps, 3, 0, 3)) - tipLines.append("{} m\u00B3 mining waste per second ({} m\u00B3 per hour)".format( - formatAmount(wps, 3, 0, 3), formatAmount(wph, 3, 0, 3))) - text = '{} m\u00B3/s'.format('+'.join(textParts)) + tipLines.append("{} m\u00B3 mining drain per second ({} m\u00B3 per hour)".format( + formatAmount(dps, 3, 0, 3), formatAmount(dph, 3, 0, 3))) + if floatUnerr(efficiency) != 1: + eff_text = '{}%'.format(formatAmount(efficiency * 100, 4, 0, 0)) + textParts.append(eff_text) + tipLines.append(f"{eff_text} mining efficiency") + text = '{}'.format(' | '.join(textParts)) tooltip = '\n'.join(tipLines) return text, tooltip elif itemGroup == "Logistic Drone":