Added column for fighter abilities, fixed some fighter bugs, added some context menus to them

This commit is contained in:
blitzmann
2016-04-28 00:29:25 -04:00
parent b15f9766c1
commit ed6f00a893
7 changed files with 69 additions and 18 deletions

View File

@@ -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

View File

@@ -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))

View File

@@ -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

View File

@@ -1,2 +1,2 @@
__all__ = ["ammo", "ammoIcon", "attributeDisplay", "baseIcon", "baseName",
"capacitorUse", "maxRange", "price", "propertyDisplay", "state", "misc"]
"capacitorUse", "maxRange", "price", "propertyDisplay", "state", "misc", "abilities"]

View 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()

View File

@@ -110,7 +110,7 @@ class FighterDisplay(d.Display):
#"Max Range",
#"Miscellanea",
"attr:maxVelocity",
"attr:fighterAbilityAttackMissileDamageMultiplier"
"Fighter Abilities"
#"Price",
]

View File

@@ -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):