Change functionality of remote rep calculations to be more efficient.

* Implement a property per attribute
* Use None as our cleared value (signifies that it really hasn't been calculated, not just that the calc was 0)
This commit is contained in:
blitzman
2017-02-24 18:33:42 -05:00
parent 5ca882d3ea
commit 3892ac5996
3 changed files with 48 additions and 19 deletions

View File

@@ -129,10 +129,10 @@ class Fit(object):
self.__capRecharge = None
self.__calculatedTargets = []
self.__remoteReps = {
"Armor": 0,
"Shield": 0,
"Hull": 0,
"Capacitor": 0,
"Armor": None,
"Shield": None,
"Hull": None,
"Capacitor": None,
}
self.factorReload = False
self.boostsFits = set()
@@ -307,6 +307,34 @@ class Fit(object):
def totalYield(self):
return self.droneYield + self.minerYield
@property
def armorRR(self):
if self.__remoteReps["Armor"] is None:
self.calculateRemoteReps()
return self.__remoteReps["Armor"]
@property
def shieldRR(self):
if self.__remoteReps["Shield"] is None:
self.calculateRemoteReps()
return self.__remoteReps["Shield"]
@property
def hullRR(self):
if self.__remoteReps["Hull"] is None:
self.calculateRemoteReps()
return self.__remoteReps["Hull"]
@property
def capTransfer(self):
if self.__remoteReps["Capacitor"] is None:
self.calculateRemoteReps()
return self.__remoteReps["Capacitor"]
@property
def maxTargets(self):
return min(self.extraAttributes["maxTargetsLockedFromSkills"],
@@ -400,7 +428,7 @@ class Fit(object):
self.commandBonuses = {}
for remoterep_type in self.__remoteReps:
self.__remoteReps[remoterep_type] = 0
self.__remoteReps[remoterep_type] = None
del self.__calculatedTargets[:]
del self.__extraDrains[:]
@@ -1157,8 +1185,7 @@ class Fit(object):
self.__capStable = True
self.__capState = 100
@property
def remoteReps(self):
def calculateRemoteReps(self):
def amount_per_second(module_amount, module_duration, module_reload, module_chargerate, module_capacity, module_volume):
numcycles = math.floor(module_capacity / (module_volume * module_chargerate))
@@ -1167,15 +1194,19 @@ class Fit(object):
return module_amount / module_duration
for remoterep_type in self.__remoteReps:
# Set all to 0
self.__remoteReps[remoterep_type] = 0
for module in self.modules:
# Skip empty modules
if module.isEmpty:
continue
module_group = getattr(module.item.group, "name")
module_group = module.item.group.name
# Skip modules that aren't online
if getattr(module, "state", 0) < 1:
if module.state < State.ACTIVE:
continue
if module_group in ("Remote Armor Repairer", "Ancillary Remote Armor Repairer"):
@@ -1230,8 +1261,6 @@ class Fit(object):
self.__remoteReps["Capacitor"] += hp_per_s
return self.__remoteReps
@property
def hp(self):
hp = {}

View File

@@ -83,10 +83,10 @@ 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, u"%s HP/s", None),
("labelRemoteShield", lambda: fit.remoteReps["Shield"], 3, 0, 0, u"%s HP/s", None),
("labelRemoteHull", lambda: fit.remoteReps["Hull"], 3, 0, 0, u"%s HP/s", None),
("labelRemoteCapacitor", lambda: fit.remoteReps["Capacitor"], 3, 0, 0, u"%s GJ/s", None),
("labelRemoteArmor", lambda: fit.armorRR, 3, 0, 0, u"%s HP/s", None),
("labelRemoteShield", lambda: fit.shieldRR, 3, 0, 0, u"%s HP/s", None),
("labelRemoteHull", lambda: fit.hullRR, 3, 0, 0, u"%s HP/s", None),
("labelRemoteCapacitor", lambda: fit.capTransfer, 3, 0, 0, u"%s GJ/s", None),
]
counter = 0

View File

@@ -83,10 +83,10 @@ 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, u"%s HP/s", None),
("labelRemoteShield", lambda: fit.remoteReps["Shield"], 3, 0, 0, u"%s HP/s", None),
("labelRemoteHull", lambda: fit.remoteReps["Hull"], 3, 0, 0, u"%s HP/s", None),
("labelRemoteCapacitor", lambda: fit.remoteReps["Capacitor"], 3, 0, 0, u"%s GJ/s", None),
("labelRemoteArmor", lambda: fit.armorRR, 3, 0, 0, u"%s HP/s", None),
("labelRemoteShield", lambda: fit.shieldRR, 3, 0, 0, u"%s HP/s", None),
("labelRemoteHull", lambda: fit.hullRR, 3, 0, 0, u"%s HP/s", None),
("labelRemoteCapacitor", lambda: fit.capTransfer, 3, 0, 0, u"%s GJ/s", None),
]
counter = 0