Get list of fighters and drones as well

This commit is contained in:
DarkPhoenix
2019-10-10 16:03:56 +03:00
parent 9fddb64ef9
commit 04a1e95730
3 changed files with 56 additions and 2 deletions

View File

@@ -364,3 +364,11 @@ class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
if self.item.groupID in fitDroneGroupLimits:
return True
return False
def canDealDamage(self, ignoreState=False):
if self.item is None:
return False
for effect in self.item.effects.values():
if effect.dealsDamage and (ignoreState or self.amountActive > 0):
return True
return False

View File

@@ -441,3 +441,15 @@ class Fighter(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
return False
return True
def canDealDamage(self, ignoreState=False, ignoreAbilityState=False):
if self.item is None:
return False
if not self.active and not ignoreState:
return False
for ability in self.abilities:
if not ability.active and not ignoreAbilityState:
continue
if ability.effect.dealsDamage:
return True
return False

View File

@@ -40,11 +40,11 @@ class AmmoPicker(wx.Dialog):
super().__init__(parent, title='Choose Different Ammo', style=wx.DEFAULT_DIALOG_STYLE)
mods = self.getMods(fit)
drones = self.getDrones(fit)
fighters = self.getFighters(fit)
self.SetMinSize((346, 156))
def getMods(self, fit):
sMkt = Market.getInstance()
loadableCharges = {}
@@ -62,6 +62,40 @@ class AmmoPicker(wx.Dialog):
for charge in mod.getValidCharges():
if sMkt.getPublicityByItem(charge):
charges.add(charge)
# We're not interested in modules which contain no charges
if charges:
mods.setdefault(frozenset(charges), []).append(mod)
return mods
def getDrones(self, fit):
drones = set()
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)
continue
if {'remoteWebifierEntity', 'remoteTargetPaintEntity'}.intersection(drone.item.effects):
drones.add(drone)
continue
return drones
def getFighters(self, fit):
fighters = set()
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)
continue
for ability in fighter.abilities:
if not ability.active:
continue
if ability.effect.name == 'fighterAbilityStasisWebifier':
fighters.add(fighter)
break
return fighters