Continue work on projections (adding/removing projected environment and fit)
This commit is contained in:
@@ -132,7 +132,7 @@ class CommandFit(object):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
es_Fit._Fit__projectedFits = association_proxy(
|
es_Fit.projectedFitDict = association_proxy(
|
||||||
"victimOf", # look at the victimOf association...
|
"victimOf", # look at the victimOf association...
|
||||||
"source_fit", # .. and return the source fits
|
"source_fit", # .. and return the source fits
|
||||||
creator=lambda sourceID, source_fit: ProjectedFit(sourceID, source_fit)
|
creator=lambda sourceID, source_fit: ProjectedFit(sourceID, source_fit)
|
||||||
|
|||||||
@@ -257,7 +257,7 @@ class Fit(object):
|
|||||||
def projectedFits(self):
|
def projectedFits(self):
|
||||||
# only in extreme edge cases will the fit be invalid, but to be sure do
|
# only in extreme edge cases will the fit be invalid, but to be sure do
|
||||||
# not return them.
|
# not return them.
|
||||||
return [fit for fit in list(self.__projectedFits.values()) if not fit.isInvalid]
|
return [fit for fit in list(self.projectedFitDict.values()) if not fit.isInvalid]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def commandFits(self):
|
def commandFits(self):
|
||||||
@@ -1615,7 +1615,7 @@ class Fit(object):
|
|||||||
forceUpdateSavedata(fit)
|
forceUpdateSavedata(fit)
|
||||||
|
|
||||||
for fit in self.projectedFits:
|
for fit in self.projectedFits:
|
||||||
copy_ship.__projectedFits[fit.ID] = fit
|
copy_ship.projectedFitDict[fit.ID] = fit
|
||||||
forceUpdateSavedata(fit)
|
forceUpdateSavedata(fit)
|
||||||
copyProjectionInfo = fit.getProjectionInfo(copy_ship.ID)
|
copyProjectionInfo = fit.getProjectionInfo(copy_ship.ID)
|
||||||
originalProjectionInfo = fit.getProjectionInfo(self.ID)
|
originalProjectionInfo = fit.getProjectionInfo(self.ID)
|
||||||
|
|||||||
59
gui/fitCommands/calc/fitAddProjectedEnv.py
Normal file
59
gui/fitCommands/calc/fitAddProjectedEnv.py
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
import wx
|
||||||
|
from service.fit import Fit
|
||||||
|
|
||||||
|
import gui.mainFrame
|
||||||
|
from gui import globalEvents as GE
|
||||||
|
#from .helpers import ModuleInfoCache
|
||||||
|
from eos.saveddata.module import Module, State
|
||||||
|
import eos.db
|
||||||
|
from logbook import Logger
|
||||||
|
from eos.saveddata.module import Module
|
||||||
|
from eos.saveddata.drone import Drone
|
||||||
|
from eos.saveddata.fighter import Fighter
|
||||||
|
from .fitRemoveProjectedModule import FitRemoveProjectedModuleCommand
|
||||||
|
pyfalog = Logger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class FitAddProjectedEnvCommand(wx.Command):
|
||||||
|
""""
|
||||||
|
from sFit.project
|
||||||
|
"""
|
||||||
|
def __init__(self, fitID, itemID):
|
||||||
|
wx.Command.__init__(self, True)
|
||||||
|
self.fitID = fitID
|
||||||
|
self.itemID = itemID
|
||||||
|
self.new_index = None
|
||||||
|
self.old_item = None
|
||||||
|
|
||||||
|
def Do(self):
|
||||||
|
pyfalog.debug("Projecting fit ({0}) onto: {1}", self.fitID, self.itemID)
|
||||||
|
fit = eos.db.getFit(self.fitID)
|
||||||
|
item = eos.db.getItem(self.itemID, eager=("attributes", "group.category"))
|
||||||
|
|
||||||
|
try:
|
||||||
|
module = Module(item)
|
||||||
|
except ValueError:
|
||||||
|
return False
|
||||||
|
|
||||||
|
# todo: thing to check for existing environmental effects
|
||||||
|
|
||||||
|
self.old_item = fit.projectedModules.makeRoom(module)
|
||||||
|
|
||||||
|
module.state = State.ONLINE
|
||||||
|
fit.projectedModules.append(module)
|
||||||
|
|
||||||
|
eos.db.commit()
|
||||||
|
self.new_index = fit.projectedModules.index(module)
|
||||||
|
return True
|
||||||
|
|
||||||
|
def Undo(self):
|
||||||
|
if self.old_item:
|
||||||
|
# If we had an item in the slot previously, add it back.
|
||||||
|
cmd = FitAddProjectedEnvCommand(self.fitID, self.old_item)
|
||||||
|
cmd.Do()
|
||||||
|
return True
|
||||||
|
from gui.fitCommands.calc.fitRemoveProjectedEnv import FitRemoveProjectedEnvCommand # avoids circular import
|
||||||
|
cmd = FitRemoveProjectedEnvCommand(self.fitID, self.itemID)
|
||||||
|
cmd.Do()
|
||||||
|
|
||||||
|
return True
|
||||||
49
gui/fitCommands/calc/fitAddProjectedFit.py
Normal file
49
gui/fitCommands/calc/fitAddProjectedFit.py
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
import wx
|
||||||
|
from service.fit import Fit
|
||||||
|
|
||||||
|
import gui.mainFrame
|
||||||
|
from gui import globalEvents as GE
|
||||||
|
#from .helpers import ModuleInfoCache
|
||||||
|
from eos.saveddata.module import Module, State
|
||||||
|
import eos.db
|
||||||
|
from logbook import Logger
|
||||||
|
from eos.saveddata.module import Module
|
||||||
|
from eos.saveddata.drone import Drone
|
||||||
|
from eos.saveddata.fighter import Fighter
|
||||||
|
from .fitRemoveProjectedModule import FitRemoveProjectedModuleCommand
|
||||||
|
pyfalog = Logger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class FitAddProjectedFitCommand(wx.Command):
|
||||||
|
""""
|
||||||
|
from sFit.project
|
||||||
|
"""
|
||||||
|
def __init__(self, fitID, projectedFitID):
|
||||||
|
wx.Command.__init__(self, True)
|
||||||
|
self.fitID = fitID
|
||||||
|
self.projectedFitID = projectedFitID
|
||||||
|
self.new_index = None
|
||||||
|
self.old_item = None
|
||||||
|
|
||||||
|
def Do(self):
|
||||||
|
pyfalog.debug("Projecting fit ({0}) onto: {1}", self.fitID, self.projectedFitID)
|
||||||
|
fit = eos.db.getFit(self.fitID)
|
||||||
|
projectedFit = eos.db.getFit(self.projectedFitID)
|
||||||
|
|
||||||
|
if projectedFit is None or projectedFit in fit.projectedFits:
|
||||||
|
return False
|
||||||
|
|
||||||
|
fit.projectedFitDict[projectedFit.ID] = projectedFit
|
||||||
|
|
||||||
|
# this bit is required -- see GH issue # 83
|
||||||
|
eos.db.saveddata_session.flush()
|
||||||
|
eos.db.saveddata_session.refresh(projectedFit)
|
||||||
|
|
||||||
|
eos.db.commit()
|
||||||
|
return True
|
||||||
|
|
||||||
|
def Undo(self):
|
||||||
|
from gui.fitCommands.calc.fitRemoveProjectedFit import FitRemoveProjectedFitCommand # avoids circular import
|
||||||
|
cmd = FitRemoveProjectedFitCommand(self.fitID, self.projectedFitID)
|
||||||
|
cmd.Do()
|
||||||
|
return True
|
||||||
44
gui/fitCommands/calc/fitRemoveProjectedEnv.py
Normal file
44
gui/fitCommands/calc/fitRemoveProjectedEnv.py
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
import wx
|
||||||
|
from service.fit import Fit
|
||||||
|
|
||||||
|
import gui.mainFrame
|
||||||
|
from gui import globalEvents as GE
|
||||||
|
#from .helpers import ModuleInfoCache
|
||||||
|
from eos.saveddata.module import Module, State
|
||||||
|
import eos.db
|
||||||
|
from logbook import Logger
|
||||||
|
from eos.saveddata.module import Module
|
||||||
|
from eos.saveddata.drone import Drone
|
||||||
|
from eos.saveddata.fighter import Fighter
|
||||||
|
from .fitRemoveProjectedModule import FitRemoveProjectedModuleCommand
|
||||||
|
pyfalog = Logger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
# this has the same exact definition that regular rpojected modules, besides the undo
|
||||||
|
class FitRemoveProjectedEnvCommand(FitRemoveProjectedModuleCommand):
|
||||||
|
""""
|
||||||
|
from sFit.project
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, fitID, itemID):
|
||||||
|
wx.Command.__init__(self, True)
|
||||||
|
self.fitID = fitID
|
||||||
|
self.itemID = itemID
|
||||||
|
self.removed_item = None
|
||||||
|
|
||||||
|
def Do(self):
|
||||||
|
pyfalog.debug("Removing ({0}) onto: {1}", self.fitID, self.itemID)
|
||||||
|
fit = eos.db.getFit(self.fitID)
|
||||||
|
|
||||||
|
item = next((x for x in fit.projectedModules if x.itemID == self.itemID), None)
|
||||||
|
self.removed_item = item.itemID
|
||||||
|
fit.projectedModules.remove(item)
|
||||||
|
|
||||||
|
eos.db.commit()
|
||||||
|
return True
|
||||||
|
|
||||||
|
def Undo(self):
|
||||||
|
from gui.fitCommands.calc.fitAddProjectedEnv import FitAddProjectedEnvCommand
|
||||||
|
cmd = FitAddProjectedEnvCommand(self.fitID, self.removed_item)
|
||||||
|
cmd.Do()
|
||||||
|
return True
|
||||||
46
gui/fitCommands/calc/fitRemoveProjectedFit.py
Normal file
46
gui/fitCommands/calc/fitRemoveProjectedFit.py
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
import wx
|
||||||
|
from service.fit import Fit
|
||||||
|
|
||||||
|
import gui.mainFrame
|
||||||
|
from gui import globalEvents as GE
|
||||||
|
#from .helpers import ModuleInfoCache
|
||||||
|
from eos.saveddata.module import Module, State
|
||||||
|
import eos.db
|
||||||
|
from logbook import Logger
|
||||||
|
from eos.saveddata.module import Module
|
||||||
|
from eos.saveddata.drone import Drone
|
||||||
|
from eos.saveddata.fighter import Fighter
|
||||||
|
from .fitRemoveProjectedModule import FitRemoveProjectedModuleCommand
|
||||||
|
pyfalog = Logger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
# this has the same exact definition that regular rpojected modules, besides the undo
|
||||||
|
class FitRemoveProjectedFitCommand(FitRemoveProjectedModuleCommand):
|
||||||
|
""""
|
||||||
|
from sFit.project
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, fitID, projectedFitID):
|
||||||
|
wx.Command.__init__(self, True)
|
||||||
|
self.fitID = fitID
|
||||||
|
self.projectedFitID = projectedFitID
|
||||||
|
|
||||||
|
def Do(self):
|
||||||
|
pyfalog.debug("Removing ({0}) onto: {1}", self.fitID, self.projectedFitID)
|
||||||
|
fit = eos.db.getFit(self.fitID)
|
||||||
|
projectedFit = eos.db.getFit(self.projectedFitID)
|
||||||
|
|
||||||
|
if projectedFit is None:
|
||||||
|
return False
|
||||||
|
|
||||||
|
del fit.projectedFitDict[projectedFit.ID]
|
||||||
|
|
||||||
|
eos.db.commit()
|
||||||
|
return True
|
||||||
|
|
||||||
|
def Undo(self):
|
||||||
|
# todo: figure out if I need to return false here if the fit doesn't return true (means it was deleted)
|
||||||
|
from gui.fitCommands.calc.fitAddProjectedFit import FitAddProjectedFitCommand
|
||||||
|
cmd = FitAddProjectedFitCommand(self.fitID, self.projectedFitID)
|
||||||
|
cmd.Do()
|
||||||
|
return True
|
||||||
@@ -6,6 +6,7 @@ from gui import globalEvents as GE
|
|||||||
from eos.saveddata.module import Module
|
from eos.saveddata.module import Module
|
||||||
from .calc.fitAddProjectedModule import FitAddProjectedModuleCommand
|
from .calc.fitAddProjectedModule import FitAddProjectedModuleCommand
|
||||||
from .calc.fitAddProjectedEnv import FitAddProjectedEnvCommand
|
from .calc.fitAddProjectedEnv import FitAddProjectedEnvCommand
|
||||||
|
from .calc.fitAddProjectedFit import FitAddProjectedFitCommand
|
||||||
from logbook import Logger
|
from logbook import Logger
|
||||||
import eos.db
|
import eos.db
|
||||||
pyfalog = Logger(__name__)
|
pyfalog = Logger(__name__)
|
||||||
@@ -52,7 +53,7 @@ class GuiAddProjectedCommand(wx.Command):
|
|||||||
# attempt a regular module projection
|
# attempt a regular module projection
|
||||||
result = self.internal_history.Submit(FitAddProjectedModuleCommand(self.fitID, self.id))
|
result = self.internal_history.Submit(FitAddProjectedModuleCommand(self.fitID, self.id))
|
||||||
elif self.type == 'fit':
|
elif self.type == 'fit':
|
||||||
pyfalog.warn("FIT PROJECTION NOT IMPLEMENTED")
|
result = self.internal_history.Submit(FitAddProjectedFitCommand(self.fitID, self.id))
|
||||||
|
|
||||||
if result:
|
if result:
|
||||||
self.sFit.recalc(self.fitID)
|
self.sFit.recalc(self.fitID)
|
||||||
|
|||||||
82
gui/fitCommands/guiRemoveProjected.py
Normal file
82
gui/fitCommands/guiRemoveProjected.py
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
import wx
|
||||||
|
from service.fit import Fit
|
||||||
|
|
||||||
|
import gui.mainFrame
|
||||||
|
from gui import globalEvents as GE
|
||||||
|
from eos.saveddata.module import Module
|
||||||
|
from .calc.fitRemoveProjectedModule import FitRemoveProjectedModuleCommand
|
||||||
|
from .calc.fitRemoveProjectedEnv import FitRemoveProjectedEnvCommand
|
||||||
|
from .calc.fitRemoveProjectedFit import FitRemoveProjectedFitCommand
|
||||||
|
from logbook import Logger
|
||||||
|
import eos.db
|
||||||
|
pyfalog = Logger(__name__)
|
||||||
|
|
||||||
|
from eos.saveddata.drone import Drone
|
||||||
|
from eos.saveddata.module import Module
|
||||||
|
from eos.saveddata.fighter import Fighter
|
||||||
|
|
||||||
|
|
||||||
|
class GuiRemoveProjectedCommand(wx.Command):
|
||||||
|
def __init__(self, fitID, thing):
|
||||||
|
wx.Command.__init__(self, True, "Projected Add")
|
||||||
|
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
|
||||||
|
self.sFit = Fit.getInstance()
|
||||||
|
self.internal_history = wx.CommandProcessor()
|
||||||
|
self.fitID = fitID
|
||||||
|
fit = self.sFit.getFit(fitID)
|
||||||
|
|
||||||
|
if isinstance(thing, Drone):
|
||||||
|
self.data = fit.projectedDrones.index(thing)
|
||||||
|
self.type = 'drone'
|
||||||
|
elif isinstance(thing, Module):
|
||||||
|
# todo: projected stuff should be wrapped in a projected class wrapper for easier maintainence
|
||||||
|
if thing.item.group.name in Module.SYSTEM_GROUPS:
|
||||||
|
self.type = 'env'
|
||||||
|
self.data = thing.itemID
|
||||||
|
else:
|
||||||
|
self.type = 'module'
|
||||||
|
self.data = fit.projectedModules.index(thing)
|
||||||
|
elif isinstance(thing, Fighter):
|
||||||
|
self.data = fit.projectedFighters.index(thing)
|
||||||
|
self.type = 'fighter'
|
||||||
|
else:
|
||||||
|
# todo: fix!
|
||||||
|
self.data = thing.ID
|
||||||
|
self.type = 'fit'
|
||||||
|
|
||||||
|
def Do(self):
|
||||||
|
result = False
|
||||||
|
# since we can project various types, we need to switch of the fit command. We can't do this switch easily in
|
||||||
|
# the fit command since each type might have a different kind of undo, easier to split it out
|
||||||
|
if self.type == 'module':
|
||||||
|
result = self.internal_history.Submit(FitRemoveProjectedModuleCommand(self.fitID, self.data))
|
||||||
|
elif self.type == 'env':
|
||||||
|
result = self.internal_history.Submit(FitRemoveProjectedEnvCommand(self.fitID, self.data))
|
||||||
|
elif self.type == 'fit':
|
||||||
|
result = self.internal_history.Submit(FitRemoveProjectedFitCommand(self.fitID, self.data))
|
||||||
|
|
||||||
|
# if item.category.name == "Drone":
|
||||||
|
# pyfalog.warn("DRONE REMOVE PROJECTION NOT IMPLEMENTED")
|
||||||
|
# elif item.category.name == "Fighter":
|
||||||
|
# pyfalog.warn("FIGHTER REMOVE PROJECTION NOT IMPLEMENTED")
|
||||||
|
# elif item.group.name in Module.SYSTEM_GROUPS:
|
||||||
|
# result = self.internal_history.Submit(FitRemoveProjectedEnvCommand(self.fitID, self.id))
|
||||||
|
# else:
|
||||||
|
# # attempt a regular module projection
|
||||||
|
#
|
||||||
|
# elif self.type == 'fit':
|
||||||
|
# pyfalog.warn("FIT REMOVE PROJECTION NOT IMPLEMENTED")
|
||||||
|
|
||||||
|
if result:
|
||||||
|
self.sFit.recalc(self.fitID)
|
||||||
|
wx.PostEvent(self.mainFrame, 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))
|
||||||
|
return True
|
||||||
|
|
||||||
@@ -416,7 +416,7 @@ class Fit(object):
|
|||||||
if thing in fit.projectedFits:
|
if thing in fit.projectedFits:
|
||||||
return
|
return
|
||||||
|
|
||||||
fit.__projectedFits[thing.ID] = thing
|
fit.projectedFitDict[thing.ID] = thing
|
||||||
|
|
||||||
# this bit is required -- see GH issue # 83
|
# this bit is required -- see GH issue # 83
|
||||||
eos.db.saveddata_session.flush()
|
eos.db.saveddata_session.flush()
|
||||||
@@ -539,7 +539,7 @@ class Fit(object):
|
|||||||
elif isinstance(thing, es_Fighter):
|
elif isinstance(thing, es_Fighter):
|
||||||
fit.projectedFighters.remove(thing)
|
fit.projectedFighters.remove(thing)
|
||||||
else:
|
else:
|
||||||
del fit.__projectedFits[thing.ID]
|
del fit.projectedFitDict[thing.ID]
|
||||||
# fit.projectedFits.remove(thing)
|
# fit.projectedFits.remove(thing)
|
||||||
|
|
||||||
eos.db.commit()
|
eos.db.commit()
|
||||||
|
|||||||
Reference in New Issue
Block a user