Added column for fighter abilities, fixed some fighter bugs, added some context menus to them
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
__all__ = ["ammo", "ammoIcon", "attributeDisplay", "baseIcon", "baseName",
|
||||
"capacitorUse", "maxRange", "price", "propertyDisplay", "state", "misc"]
|
||||
"capacitorUse", "maxRange", "price", "propertyDisplay", "state", "misc", "abilities"]
|
||||
|
||||
41
gui/builtinViewColumns/abilities.py
Normal file
41
gui/builtinViewColumns/abilities.py
Normal file
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
#===============================================================================
|
||||
|
||||
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()
|
||||
@@ -110,7 +110,7 @@ class FighterDisplay(d.Display):
|
||||
#"Max Range",
|
||||
#"Miscellanea",
|
||||
"attr:maxVelocity",
|
||||
"attr:fighterAbilityAttackMissileDamageMultiplier"
|
||||
"Fighter Abilities"
|
||||
#"Price",
|
||||
]
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user