Refactor non-projected fighter commands
This commit is contained in:
@@ -1069,9 +1069,12 @@ class Fit(object):
|
||||
for f in self.fighters:
|
||||
if f.active:
|
||||
amount += 1
|
||||
|
||||
return amount
|
||||
|
||||
@property
|
||||
def fighterTubesTotal(self):
|
||||
return self.ship.getModifiedItemAttr("fighterTubes")
|
||||
|
||||
@property
|
||||
def cargoBayUsed(self):
|
||||
amount = 0
|
||||
|
||||
@@ -62,7 +62,6 @@ class FighterAbility(ContextMenu):
|
||||
|
||||
fitID = self.mainFrame.getActiveFit()
|
||||
fit = Fit.getInstance().getFit(fitID)
|
||||
print(self.isProjected)
|
||||
if self.isProjected:
|
||||
index = fit.projectedFighters.index(self.fighter)
|
||||
else:
|
||||
|
||||
@@ -203,7 +203,7 @@ class ResourcesViewFull(StatsView):
|
||||
("label%sUsedDronesActive", lambda: fit.activeDrones, 0, 0, 0),
|
||||
("label%sTotalDronesActive", lambda: fit.extraAttributes["maxActiveDrones"], 0, 0, 0),
|
||||
("label%sUsedFighterTubes", lambda: fit.fighterTubesUsed, 3, 0, 9),
|
||||
("label%sTotalFighterTubes", lambda: fit.ship.getModifiedItemAttr("fighterTubes"), 3, 0, 9),
|
||||
("label%sTotalFighterTubes", lambda: fit.fighterTubesTotal, 3, 0, 9),
|
||||
("label%sUsedCalibrationPoints", lambda: fit.calibrationUsed, 0, 0, 0),
|
||||
("label%sTotalCalibrationPoints", lambda: fit.ship.getModifiedItemAttr('upgradeCapacity'), 0, 0, 0),
|
||||
("label%sUsedPg", lambda: fit.pgUsed, 4, 0, 9),
|
||||
|
||||
@@ -11,11 +11,11 @@ pyfalog = Logger(__name__)
|
||||
|
||||
class FitAddBoosterCommand(wx.Command):
|
||||
|
||||
def __init__(self, fitID, newBoosterInfo, newPosition=None):
|
||||
def __init__(self, fitID, boosterInfo, position=None):
|
||||
wx.Command.__init__(self, True, 'Add Booster')
|
||||
self.fitID = fitID
|
||||
self.newBoosterInfo = newBoosterInfo
|
||||
self.newPosition = newPosition
|
||||
self.newBoosterInfo = boosterInfo
|
||||
self.newPosition = position
|
||||
self.oldBoosterInfo = None
|
||||
self.oldPosition = None
|
||||
|
||||
@@ -40,8 +40,8 @@ class FitAddBoosterCommand(wx.Command):
|
||||
pyfalog.warning('Failed to insert to list')
|
||||
cmd = FitAddBoosterCommand(
|
||||
fitID=self.fitID,
|
||||
newBoosterInfo=self.oldBoosterInfo,
|
||||
newPosition=self.oldPosition)
|
||||
boosterInfo=self.oldBoosterInfo,
|
||||
position=self.oldPosition)
|
||||
cmd.Do()
|
||||
return False
|
||||
else:
|
||||
@@ -51,8 +51,8 @@ class FitAddBoosterCommand(wx.Command):
|
||||
pyfalog.warning('Failed to append to list')
|
||||
cmd = FitAddBoosterCommand(
|
||||
fitID=self.fitID,
|
||||
newBoosterInfo=self.oldBoosterInfo,
|
||||
newPosition=self.oldPosition)
|
||||
boosterInfo=self.oldBoosterInfo,
|
||||
position=self.oldPosition)
|
||||
cmd.Do()
|
||||
return False
|
||||
self.newPosition = fit.boosters.index(newBooster)
|
||||
@@ -65,8 +65,8 @@ class FitAddBoosterCommand(wx.Command):
|
||||
if self.oldBoosterInfo and self.oldPosition:
|
||||
cmd = FitAddBoosterCommand(
|
||||
fitID=self.fitID,
|
||||
newBoosterInfo=self.oldBoosterInfo,
|
||||
newPosition=self.oldPosition)
|
||||
boosterInfo=self.oldBoosterInfo,
|
||||
position=self.oldPosition)
|
||||
return cmd.Do()
|
||||
from .fitRemoveBooster import FitRemoveBoosterCommand
|
||||
cmd = FitRemoveBoosterCommand(self.fitID, self.newPosition)
|
||||
|
||||
@@ -2,57 +2,63 @@ import wx
|
||||
from logbook import Logger
|
||||
|
||||
import eos.db
|
||||
from eos.saveddata.fighter import Fighter
|
||||
from eos.exception import HandledListActionError
|
||||
from service.fit import Fit
|
||||
from service.market import Market
|
||||
|
||||
|
||||
pyfalog = Logger(__name__)
|
||||
|
||||
|
||||
class FitAddFighterCommand(wx.Command):
|
||||
""""
|
||||
from sFit.addFighter
|
||||
"""
|
||||
def __init__(self, fitID, itemID, state, abilities):
|
||||
wx.Command.__init__(self, True, "Add Fighter")
|
||||
|
||||
def __init__(self, fitID, fighterInfo, position=None):
|
||||
wx.Command.__init__(self, True, 'Add Fighter')
|
||||
self.fitID = fitID
|
||||
self.newItemID = itemID
|
||||
self.newState = state
|
||||
self.newAbilities = abilities
|
||||
self.newIndex = None
|
||||
self.fighterInfo = fighterInfo
|
||||
self.position = position
|
||||
|
||||
def Do(self):
|
||||
pyfalog.debug('Doing addition of fighter {} to fit {}'.format(self.fighterInfo, self.fitID))
|
||||
fighter = self.fighterInfo.toFighter()
|
||||
if fighter is None:
|
||||
return False
|
||||
|
||||
fit = Fit.getInstance().getFit(self.fitID)
|
||||
item = Market.getInstance().getItem(self.newItemID, eager=("attributes", "group.category"))
|
||||
try:
|
||||
fighter = Fighter(item)
|
||||
except ValueError:
|
||||
pyfalog.warning("Invalid fighter: {}", item)
|
||||
return False
|
||||
if not fighter.fits(fit):
|
||||
pyfalog.warning('Fighter does not fit')
|
||||
return False
|
||||
|
||||
used = fit.getSlotsUsed(fighter.slot)
|
||||
total = fit.getNumSlots(fighter.slot)
|
||||
if self.newState is not None:
|
||||
fighter.active = self.newState
|
||||
elif used >= total:
|
||||
fighter.active = False
|
||||
# If we were not asked to set specific state, figure it out based on available tubes
|
||||
if self.fighterInfo.state is None:
|
||||
typeUsed = fit.getSlotsUsed(fighter.slot)
|
||||
typeTotal = fit.getNumSlots(fighter.slot)
|
||||
|
||||
if fit.fighterTubesUsed >= fit.fighterTubesTotal or typeUsed >= typeTotal:
|
||||
fighter.active = False
|
||||
else:
|
||||
fighter.active = True
|
||||
|
||||
if self.position is None:
|
||||
try:
|
||||
fit.fighters.append(fighter)
|
||||
except HandledListActionError:
|
||||
pyfalog.warning('Failed to append to list')
|
||||
eos.db.commit()
|
||||
return False
|
||||
self.position = fit.fighters.index(fighter)
|
||||
else:
|
||||
fighter.active = True
|
||||
|
||||
if self.newAbilities is not None:
|
||||
for ability in fighter.abilities:
|
||||
ability.active = self.newAbilities.get(ability.effectID, ability.active)
|
||||
|
||||
fit.fighters.append(fighter)
|
||||
self.newIndex = fit.fighters.index(fighter)
|
||||
try:
|
||||
fit.fighters.insert(self.position, fighter)
|
||||
except HandledListActionError:
|
||||
pyfalog.warning('Failed to insert to list')
|
||||
eos.db.commit()
|
||||
return False
|
||||
eos.db.commit()
|
||||
return True
|
||||
|
||||
def Undo(self):
|
||||
from .fitRemoveFighter import FitRemoveFighterCommand # Avoid circular import
|
||||
cmd = FitRemoveFighterCommand(self.fitID, self.newIndex)
|
||||
pyfalog.debug('Undoing addition of fighter {} to fit {}'.format(self.fighterInfo, self.fitID))
|
||||
from .fitRemoveFighter import FitRemoveFighterCommand
|
||||
cmd = FitRemoveFighterCommand(fitID=self.fitID, position=self.position)
|
||||
cmd.Do()
|
||||
return True
|
||||
|
||||
@@ -32,6 +32,6 @@ class FitRemoveBoosterCommand(wx.Command):
|
||||
from .fitAddBooster import FitAddBoosterCommand # Avoid circular import
|
||||
cmd = FitAddBoosterCommand(
|
||||
fitID=self.fitID,
|
||||
newBoosterInfo=self.savedBoosterInfo,
|
||||
newPosition=self.position)
|
||||
boosterInfo=self.savedBoosterInfo,
|
||||
position=self.position)
|
||||
return cmd.Do()
|
||||
|
||||
@@ -2,6 +2,7 @@ import wx
|
||||
from logbook import Logger
|
||||
|
||||
import eos.db
|
||||
from gui.fitCommands.helpers import FighterInfo
|
||||
from service.fit import Fit
|
||||
|
||||
|
||||
@@ -9,34 +10,24 @@ pyfalog = Logger(__name__)
|
||||
|
||||
|
||||
class FitRemoveFighterCommand(wx.Command):
|
||||
""""
|
||||
Fitting command that removes a module at a specified positions
|
||||
|
||||
from sFit.removeFighter
|
||||
"""
|
||||
def __init__(self, fitID: int, position: int):
|
||||
wx.Command.__init__(self, True)
|
||||
def __init__(self, fitID, position):
|
||||
wx.Command.__init__(self, True, 'Remove Fighter')
|
||||
self.fitID = fitID
|
||||
self.position = position
|
||||
self.change = None
|
||||
self.savedItemID = None
|
||||
self.savedAmount = None
|
||||
self.savedStatus = None
|
||||
self.savedAbilities = None
|
||||
self.savedFighterInfo = None
|
||||
|
||||
def Do(self):
|
||||
fitID = self.fitID
|
||||
fit = Fit.getInstance().getFit(fitID)
|
||||
pyfalog.debug('Doing removal of fighter at position {} from fit {}'.format(self.position, self.fitID))
|
||||
fit = Fit.getInstance().getFit(self.fitID)
|
||||
fighter = fit.fighters[self.position]
|
||||
self.savedItemID = fighter.itemID
|
||||
self.savedAmount = fighter.amount
|
||||
self.savedStatus = fighter.active
|
||||
self.savedAbilities = {fa.effectID: fa.active for fa in fighter.abilities}
|
||||
self.savedFighterInfo = FighterInfo.fromFighter(fighter)
|
||||
fit.fighters.remove(fighter)
|
||||
eos.db.commit()
|
||||
return True
|
||||
|
||||
def Undo(self):
|
||||
from gui.fitCommands.calc.fitAddFighter import FitAddFighterCommand # avoids circular import
|
||||
cmd = FitAddFighterCommand(self.fitID, self.savedItemID, self.savedStatus, self.savedAbilities)
|
||||
pyfalog.debug('Undoing removal of fighter at position {} from fit {}'.format(self.position, self.fitID))
|
||||
from gui.fitCommands.calc.fitAddFighter import FitAddFighterCommand
|
||||
cmd = FitAddFighterCommand(fitID=self.fitID, fighterInfo=self.savedFighterInfo, position=self.position)
|
||||
return cmd.Do()
|
||||
|
||||
@@ -20,7 +20,7 @@ class GuiAddBoosterCommand(wx.Command):
|
||||
def Do(self):
|
||||
if self.internal_history.Submit(FitAddBoosterCommand(
|
||||
fitID=self.fitID,
|
||||
newBoosterInfo=BoosterInfo(itemID=self.itemID))):
|
||||
boosterInfo=BoosterInfo(itemID=self.itemID))):
|
||||
self.sFit.recalc(self.fitID)
|
||||
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.fitID))
|
||||
return True
|
||||
|
||||
@@ -1,30 +1,29 @@
|
||||
import wx
|
||||
from service.fit import Fit
|
||||
|
||||
import gui.mainFrame
|
||||
from gui import globalEvents as GE
|
||||
from gui.fitCommands.helpers import FighterInfo
|
||||
from service.fit import Fit
|
||||
from .calc.fitAddFighter import FitAddFighterCommand
|
||||
|
||||
|
||||
class GuiAddFighterCommand(wx.Command):
|
||||
def __init__(self, fitID, itemID):
|
||||
wx.Command.__init__(self, True, "Fighter Add")
|
||||
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
|
||||
self.sFit = Fit.getInstance()
|
||||
self.internal_history = wx.CommandProcessor()
|
||||
self.fitID = fitID
|
||||
self.itemID = itemID
|
||||
|
||||
def Do(self):
|
||||
if self.internal_history.Submit(FitAddFighterCommand(self.fitID, self.itemID, None, None)):
|
||||
self.sFit.recalc(self.fitID)
|
||||
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.fitID))
|
||||
if self.internal_history.Submit(FitAddFighterCommand(fitID=self.fitID, fighterInfo=FighterInfo(itemID=self.itemID))):
|
||||
Fit.getInstance().recalc(self.fitID)
|
||||
wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
|
||||
return True
|
||||
return False
|
||||
|
||||
def Undo(self):
|
||||
for _ in self.internal_history.Commands:
|
||||
self.internal_history.Undo()
|
||||
self.sFit.recalc(self.fitID)
|
||||
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.fitID))
|
||||
Fit.getInstance().recalc(self.fitID)
|
||||
wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
|
||||
return True
|
||||
|
||||
@@ -22,7 +22,6 @@ class GuiImportMutatedModuleCommand(wx.Command):
|
||||
baseItemID=baseItem.ID,
|
||||
mutaplasmidID=mutaplasmid.ID,
|
||||
mutations=mutations)
|
||||
print(self.newModInfo)
|
||||
|
||||
def Do(self):
|
||||
pyfalog.debug("{} Do()".format(self))
|
||||
|
||||
@@ -3,7 +3,7 @@ from service.fit import Fit
|
||||
|
||||
import gui.mainFrame
|
||||
from gui import globalEvents as GE
|
||||
from gui.fitCommands.helpers import ModuleInfo, BoosterInfo
|
||||
from gui.fitCommands.helpers import ModuleInfo, FighterInfo, BoosterInfo
|
||||
from .calc.fitRemoveImplant import FitRemoveImplantCommand
|
||||
from .calc.fitAddImplant import FitAddImplantCommand
|
||||
from .calc.fitAddBooster import FitAddBoosterCommand
|
||||
@@ -46,9 +46,9 @@ class GuiMetaSwapCommand(wx.Command):
|
||||
self.data.append(((FitRemoveCargoCommand, fitID, x.itemID, 1, True), (FitAddCargoCommand, fitID, itemID, x.amount)))
|
||||
elif context == 'fighterItem':
|
||||
for x in selection:
|
||||
state = x.active
|
||||
abilities = {fa.effectID: fa.active for fa in x.abilities}
|
||||
self.data.append(((FitRemoveFighterCommand, fitID, fit.fighters.index(x)), (FitAddFighterCommand, fitID, itemID, state, abilities)))
|
||||
fighterInfo = FighterInfo.fromFighter(x)
|
||||
fighterInfo.itemID = itemID
|
||||
self.data.append(((FitRemoveFighterCommand, fitID, fit.fighters.index(x)), (FitAddFighterCommand, fitID, fighterInfo)))
|
||||
elif context == 'droneItem':
|
||||
for x in selection:
|
||||
self.data.append(((FitChangeDroneVariationCommand, fitID, fit.drones.index(x), itemID),),)
|
||||
|
||||
@@ -5,6 +5,7 @@ from eos.const import FittingModuleState
|
||||
from eos.saveddata.booster import Booster
|
||||
from eos.saveddata.cargo import Cargo
|
||||
from eos.saveddata.drone import Drone
|
||||
from eos.saveddata.fighter import Fighter
|
||||
from eos.saveddata.module import Module
|
||||
from service.market import Market
|
||||
from utils.repr import makeReprStr
|
||||
@@ -51,14 +52,15 @@ class ModuleInfo:
|
||||
baseItem = None
|
||||
mutaplasmid = None
|
||||
try:
|
||||
mod = Module(item, baseItem, mutaplasmid)
|
||||
mod = Module(item, baseItem=baseItem, mutaplasmid=mutaplasmid)
|
||||
except ValueError:
|
||||
pyfalog.warning('Invalid item: {}'.format(self.itemID))
|
||||
return None
|
||||
|
||||
for attrID, mutator in mod.mutators.items():
|
||||
if attrID in self.mutations:
|
||||
mutator.value = self.mutations[attrID]
|
||||
if self.mutations is not None:
|
||||
for attrID, mutator in mod.mutators.items():
|
||||
if attrID in self.mutations:
|
||||
mutator.value = self.mutations[attrID]
|
||||
|
||||
if self.spoolType is not None and self.spoolAmount is not None:
|
||||
mod.spoolType = self.spoolType
|
||||
@@ -116,8 +118,7 @@ class BoosterInfo:
|
||||
booster.active = self.state
|
||||
if self.sideEffects is not None:
|
||||
for sideEffect in booster.sideEffects:
|
||||
if sideEffect.effectID in self.sideEffects:
|
||||
sideEffect.active = self.sideEffects[sideEffect.effectID]
|
||||
sideEffect.active = self.sideEffects.get(sideEffect.effectID, sideEffect.active)
|
||||
return booster
|
||||
|
||||
class CargoInfo:
|
||||
@@ -126,15 +127,6 @@ class CargoInfo:
|
||||
self.itemID = itemID
|
||||
self.amount = amount
|
||||
|
||||
@classmethod
|
||||
def fromCargo(cls, cargo):
|
||||
if cargo is None:
|
||||
return None
|
||||
info = cls(
|
||||
itemID=cargo.itemID,
|
||||
amount=cargo.active)
|
||||
return info
|
||||
|
||||
def toCargo(self):
|
||||
item = Market.getInstance().getItem(self.itemID)
|
||||
cargo = Cargo(item)
|
||||
@@ -177,6 +169,45 @@ class DroneInfo:
|
||||
return makeReprStr(self, ['itemID', 'amount', 'amountActive'])
|
||||
|
||||
|
||||
class FighterInfo:
|
||||
|
||||
def __init__(self, itemID, amount=None, state=None, abilities=None):
|
||||
self.itemID = itemID
|
||||
self.amount = amount
|
||||
self.state = state
|
||||
self.abilities = abilities
|
||||
|
||||
@classmethod
|
||||
def fromFighter(cls, fighter):
|
||||
if fighter is None:
|
||||
return None
|
||||
info = cls(
|
||||
itemID=fighter.itemID,
|
||||
amount=fighter.amount,
|
||||
state=fighter.active,
|
||||
abilities={fa.effectID: fa.active for fa in fighter.abilities})
|
||||
return info
|
||||
|
||||
def toFighter(self):
|
||||
item = Market.getInstance().getItem(self.itemID)
|
||||
try:
|
||||
fighter = Fighter(item)
|
||||
except ValueError:
|
||||
pyfalog.warning('Invalid item: {}'.format(self.itemID))
|
||||
return None
|
||||
if self.amount is not None:
|
||||
fighter.amount = self.amount
|
||||
if self.state is not None:
|
||||
fighter.active = self.state
|
||||
if self.abilities is not None:
|
||||
for ability in fighter.abilities:
|
||||
ability.active = self.abilities.get(ability.effectID, ability.active)
|
||||
return fighter
|
||||
|
||||
def __repr__(self):
|
||||
return makeReprStr(self, ['itemID', 'amount', 'state', 'abilities'])
|
||||
|
||||
|
||||
def stateLimit(itemIdentity):
|
||||
item = Market.getInstance().getItem(itemIdentity)
|
||||
if {'moduleBonusAssaultDamageControl', 'moduleBonusIndustrialInvulnerability'}.intersection(item.effects):
|
||||
|
||||
Reference in New Issue
Block a user