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