diff --git a/eos/saveddata/drone.py b/eos/saveddata/drone.py index b07484848..bd5812c4b 100755 --- a/eos/saveddata/drone.py +++ b/eos/saveddata/drone.py @@ -23,6 +23,7 @@ from sqlalchemy.orm import validates, reconstructor class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): DAMAGE_ATTRIBUTES = ("emDamage", "kineticDamage", "explosiveDamage", "thermalDamage") + MINING_ATTRIBUTES = ("miningAmount",) def __init__(self, item): if item.category.name != "Drone": @@ -34,6 +35,7 @@ class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): self.amount = 0 self.amountActive = 0 self.__dps = None + self.__miningyield = None self.projected = False self.__itemModifiedAttributes = ModifiedAttributeDict() self.itemModifiedAttributes.original = self.item.attributes @@ -41,6 +43,7 @@ class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): @reconstructor def init(self): self.__dps = None + self.__miningyield = None self.__item = None self.__charge = None @@ -97,6 +100,11 @@ class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): if attr in self.itemModifiedAttributes or attr in self.chargeModifiedAttributes: return True + @property + def mines(self): + if "miningAmount" in self.itemModifiedAttributes: + return True + @property def hasAmmo(self): return self.charge is not None @@ -121,6 +129,21 @@ class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): return self.__dps + @property + def miningStats(self): + if self.__miningyield == None: + if self.mines is True and self.amountActive > 0: + attr = "duration" + getter = self.getModifiedItemAttr + + cycleTime = self.getModifiedItemAttr(attr) + volley = sum(map(lambda d: getter(d), self.MINING_ATTRIBUTES)) * self.amountActive + self.__miningyield = volley / (cycleTime / 1000.0) + else: + self.__miningyield = 0 + + return self.__miningyield + @property def maxRange(self): attrs = ("shieldTransferRange", "powerTransferRange", @@ -158,6 +181,7 @@ class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): def clear(self): self.__dps = None + self.__miningyield = None self.itemModifiedAttributes.clear() self.chargeModifiedAttributes.clear() diff --git a/eos/saveddata/module.py b/eos/saveddata/module.py index 433a43db5..9e8121f4d 100755 --- a/eos/saveddata/module.py +++ b/eos/saveddata/module.py @@ -45,6 +45,7 @@ class Hardpoint(Enum): class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): """An instance of this class represents a module together with its charge and modified attributes""" DAMAGE_ATTRIBUTES = ("emDamage", "kineticDamage", "explosiveDamage", "thermalDamage") + MINING_ATTRIBUTES = ("miningAmount", ) def __init__(self, item): self.__item = item if item != None else 0 @@ -53,6 +54,7 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): self.projected = False self.state = State.ONLINE self.__dps = None + self.__miningyield = None self.__volley = None self.__reloadTime = None self.__reloadForce = None @@ -74,6 +76,7 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): self.__charge = None self.__volley = None self.__dps = None + self.__miningyield = None self.__reloadTime = None self.__reloadForce = None self.__chargeCycles = None @@ -82,6 +85,7 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): self.__item = 0 self.__charge = 0 self.__dps = 0 + self.__miningyield = 0 self.__volley = 0 self.__reloadTime = 0 self.__reloadForce = None @@ -330,6 +334,24 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): return self.__dps, self.__volley + @property + def miningStats(self): + if self.__miningyield == None: + if self.isEmpty: + self.__miningyield = 0 + else: + if self.state >= State.ACTIVE: + volley = sum(map(lambda attr: self.getModifiedItemAttr(attr) or 0, self.MINING_ATTRIBUTES)) + if volley: + cycleTime = self.cycleTime + self.__miningyield = volley / (cycleTime / 1000.0) + else: + self.__miningyield = 0 + else: + self.__miningyield = 0 + + return self.__miningyield + @property def dps(self): return self.damageStats[0] @@ -552,6 +574,7 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): def clear(self): self.__dps = None + self.__miningyield = None self.__volley = None self.__reloadTime = None self.__reloadForce = None