Add info on drones/fighters to ammo picker

This commit is contained in:
DarkPhoenix
2019-11-13 16:46:47 +03:00
parent e2d943b0b0
commit 1321e70035
3 changed files with 26 additions and 17 deletions

View File

@@ -36,6 +36,11 @@ import gui.fitCommands as cmd
from gui.fitCommands.helpers import droneStackLimit
DRONE_ORDER = ('Light Scout Drones', 'Medium Scout Drones',
'Heavy Attack Drones', 'Sentry Drones', 'Combat Utility Drones',
'Electronic Warfare Drones', 'Logistic Drones', 'Mining Drones', 'Salvage Drones')
class DroneViewDrop(wx.DropTarget):
def __init__(self, dropFn, *args, **kwargs):
super(DroneViewDrop, self).__init__(*args, **kwargs)
@@ -186,17 +191,13 @@ class DroneView(Display):
self.mainFrame.command.Submit(cmd.GuiMergeLocalDroneStacksCommand(
fitID=fitID, srcPosition=srcPosition, dstPosition=dstPosition))
DRONE_ORDER = ('Light Scout Drones', 'Medium Scout Drones',
'Heavy Attack Drones', 'Sentry Drones', 'Combat Utility Drones',
'Electronic Warfare Drones', 'Logistic Drones', 'Mining Drones', 'Salvage Drones')
def droneKey(self, drone):
@staticmethod
def droneKey(drone):
sMkt = Market.getInstance()
groupName = sMkt.getMarketGroupByItem(drone.item).name
return (self.DRONE_ORDER.index(groupName),
drone.item.name)
return (DRONE_ORDER.index(groupName), drone.item.name)
def fitChanged(self, event):
event.Skip()

View File

@@ -34,6 +34,9 @@ from service.fit import Fit
from service.market import Market
FIGHTER_ORDER = ('Light Fighter', 'Heavy Fighter', 'Support Fighter')
class FighterViewDrop(wx.DropTarget):
def __init__(self, dropFn, *args, **kwargs):
super(FighterViewDrop, self).__init__(*args, **kwargs)
@@ -250,11 +253,10 @@ class FighterDisplay(d.Display):
def _merge(src, dst):
return
FIGHTER_ORDER = ('Light Fighter', 'Heavy Fighter', 'Support Fighter')
def fighterKey(self, fighter):
@staticmethod
def fighterKey(fighter):
groupName = Market.getInstance().getGroupByItem(fighter.item).name
orderPos = self.FIGHTER_ORDER.index(groupName)
orderPos = FIGHTER_ORDER.index(groupName)
# Sort support fighters by name, ignore their abilities
if groupName == 'Support Fighter':
abilityEffectIDs = ()

View File

@@ -124,8 +124,14 @@ class AmmoPickerContents(wx.ScrolledCanvas):
addCheckbox(ammo.name, indentLvl=2)
if drones:
addRadioButton('Drones')
from gui.builtinAdditionPanes.droneView import DroneView
for drone in sorted(drones, key=DroneView.droneKey):
addCheckbox('{}x {}'.format(drone.amount, drone.item.name), indentLvl=1)
if fighters:
addRadioButton('Fighters')
from gui.builtinAdditionPanes.fighterView import FighterDisplay
for fighter in sorted(fighters, key=FighterDisplay.fighterKey):
addCheckbox('{}x {}'.format(fighter.amount, fighter.item.name), indentLvl=1)
self.SetSizer(mainSizer)
self.refreshStatus()
@@ -162,35 +168,35 @@ class AmmoPickerContents(wx.ScrolledCanvas):
return modsFinal
def getDrones(self, fit):
drones = set()
drones = []
if fit is not None:
for drone in fit.drones:
if drone.item is None:
continue
# Drones are our "ammo", so we want to pick even those which are inactive
if drone.canDealDamage(ignoreState=True):
drones.add(drone)
drones.append(drone)
continue
if {'remoteWebifierEntity', 'remoteTargetPaintEntity'}.intersection(drone.item.effects):
drones.add(drone)
drones.append(drone)
continue
return drones
def getFighters(self, fit):
fighters = set()
fighters = []
if fit is not None:
for fighter in fit.fighters:
if fighter.item is None:
continue
# Fighters are our "ammo" as well
if fighter.canDealDamage(ignoreState=True):
fighters.add(fighter)
fighters.append(fighter)
continue
for ability in fighter.abilities:
if not ability.active:
continue
if ability.effect.name == 'fighterAbilityStasisWebifier':
fighters.add(fighter)
fighters.append(fighter)
break
return fighters