diff --git a/eos/saveddata/fighter.py b/eos/saveddata/fighter.py index 957feb27b..210dd4d1b 100644 --- a/eos/saveddata/fighter.py +++ b/eos/saveddata/fighter.py @@ -115,11 +115,11 @@ class Fighter(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): @property def amountActive(self): - return self.getModifiedItemAttr("fighterSquadronMaxSize") if self.amount == -1 else self.amount + return int(self.getModifiedItemAttr("fighterSquadronMaxSize")) if self.amount == -1 else self.amount @amountActive.setter def amountActive(self, i): - self.amount = max(i, self.getModifiedItemAttr("fighterSquadronMaxSize")) + self.amount = int(max(min(i, self.getModifiedItemAttr("fighterSquadronMaxSize")), 0)) @property def abilities(self): @@ -157,20 +157,21 @@ class Fighter(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): if self.__dps is None: self.__volley = 0 self.__dps = 0 - for ability in self.abilities: - if ability.dealsDamage and ability.active and self.amountActive > 0: - cycleTime = self.getModifiedItemAttr("{}Duration".format(ability.attrPrefix)) + if self.active: + for ability in self.abilities: + if ability.dealsDamage and ability.active and self.amountActive > 0: + cycleTime = self.getModifiedItemAttr("{}Duration".format(ability.attrPrefix)) - volley = sum(map(lambda d2, d: - (self.getModifiedItemAttr("{}Damage{}".format(ability.attrPrefix, d2)) or 0) * - (1-getattr(targetResists, "{}Amount".format(d), 0)), - self.DAMAGE_TYPES2, self.DAMAGE_TYPES)) + volley = sum(map(lambda d2, d: + (self.getModifiedItemAttr("{}Damage{}".format(ability.attrPrefix, d2)) or 0) * + (1-getattr(targetResists, "{}Amount".format(d), 0)), + self.DAMAGE_TYPES2, self.DAMAGE_TYPES)) - volley *= self.amountActive - print self.getModifiedItemAttr("{}DamageMultiplier".format(ability.attrPrefix)) - volley *= self.getModifiedItemAttr("{}DamageMultiplier".format(ability.attrPrefix)) or 1 - self.__volley += volley - self.__dps += volley / (cycleTime / 1000.0) + volley *= self.amountActive + print self.getModifiedItemAttr("{}DamageMultiplier".format(ability.attrPrefix)) + volley *= self.getModifiedItemAttr("{}DamageMultiplier".format(ability.attrPrefix)) or 1 + self.__volley += volley + self.__dps += volley / (cycleTime / 1000.0) return self.__dps, self.__volley diff --git a/gui/builtinContextMenus/amount.py b/gui/builtinContextMenus/amount.py index 2fe32fc88..ab7c82ca2 100644 --- a/gui/builtinContextMenus/amount.py +++ b/gui/builtinContextMenus/amount.py @@ -11,7 +11,7 @@ class ChangeAmount(ContextMenu): self.mainFrame = gui.mainFrame.MainFrame.getInstance() def display(self, srcContext, selection): - return srcContext in ("cargoItem","projectedFit") + return srcContext in ("cargoItem","projectedFit","fighterItem") def getText(self, itmContext, selection): return "Change {0} Quantity".format(itmContext) @@ -54,6 +54,8 @@ class AmountChanger(wx.Dialog): sFit.addCargo(fitID, self.thing.item.ID, int(self.input.GetLineText(0)), replace=True) elif isinstance(self.thing, eos.types.Fit): sFit.changeAmount(fitID, self.thing, int(self.input.GetLineText(0))) + elif isinstance(self.thing, eos.types.Fighter): + sFit.changeActiveFighters(fitID, self.thing, int(self.input.GetLineText(0))) wx.PostEvent(mainFrame, GE.FitChanged(fitID=fitID)) diff --git a/gui/builtinContextMenus/marketJump.py b/gui/builtinContextMenus/marketJump.py index d38fd9f1c..180935cbf 100644 --- a/gui/builtinContextMenus/marketJump.py +++ b/gui/builtinContextMenus/marketJump.py @@ -13,7 +13,7 @@ class MarketJump(ContextMenu): "implantItem", "boosterItem", "projectedModule", "projectedDrone", "projectedCharge", "cargoItem", - "implantItemChar") + "implantItemChar", "fighterItem") if not srcContext in validContexts or selection is None or len(selection) < 1: return False diff --git a/gui/builtinViewColumns/__init__.py b/gui/builtinViewColumns/__init__.py index 4c5d8495e..d66f423bf 100644 --- a/gui/builtinViewColumns/__init__.py +++ b/gui/builtinViewColumns/__init__.py @@ -1,2 +1,2 @@ __all__ = ["ammo", "ammoIcon", "attributeDisplay", "baseIcon", "baseName", - "capacitorUse", "maxRange", "price", "propertyDisplay", "state", "misc"] + "capacitorUse", "maxRange", "price", "propertyDisplay", "state", "misc", "abilities"] diff --git a/gui/builtinViewColumns/abilities.py b/gui/builtinViewColumns/abilities.py new file mode 100644 index 000000000..12081500a --- /dev/null +++ b/gui/builtinViewColumns/abilities.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +#=============================================================================== +# Copyright (C) 2010 Diego Duclos +# +# This file is part of pyfa. +# +# pyfa is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# pyfa is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with pyfa. If not, see . +#=============================================================================== + +from gui.viewColumn import ViewColumn +import gui.mainFrame + +import wx +from eos.types import Drone, Cargo, Fit, Module, Slot, Rack, Implant, Fighter +import service + +class Abilities(ViewColumn): + name = "Fighter Abilities" + def __init__(self, fittingView, params): + ViewColumn.__init__(self, fittingView) + + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.columnText = "Active Abilities" + self.mask = wx.LIST_MASK_TEXT + + def getText(self, stuff): + if isinstance(stuff, Fighter): + return ", ".join([x.name for x in stuff.abilities if x.active]) + +Abilities.register() diff --git a/gui/fighterView.py b/gui/fighterView.py index 991663eb3..1ee41a225 100644 --- a/gui/fighterView.py +++ b/gui/fighterView.py @@ -110,7 +110,7 @@ class FighterDisplay(d.Display): #"Max Range", #"Miscellanea", "attr:maxVelocity", - "attr:fighterAbilityAttackMissileDamageMultiplier" + "Fighter Abilities" #"Price", ] diff --git a/service/fit.py b/service/fit.py index 355cf0076..84c42d723 100644 --- a/service/fit.py +++ b/service/fit.py @@ -401,6 +401,13 @@ class Fit(object): eos.db.commit() self.recalc(fit) + def changeActiveFighters(self, fitID, fighter, amount): + fit = eos.db.getFit(fitID) + fighter.amountActive = amount + + eos.db.commit() + self.recalc(fit) + def removeProjected(self, fitID, thing): fit = eos.db.getFit(fitID) if isinstance(thing, eos.types.Drone):