Rework how toggling factor reload works

This commit is contained in:
DarkPhoenix
2019-07-05 09:10:23 +03:00
parent 63ca8dc559
commit e6dce726b7
16 changed files with 91 additions and 48 deletions

View File

@@ -137,9 +137,15 @@ class Fit(object):
self.ecmProjectedStr = 1
self.commandBonuses = {}
@property
def hasDpsData(self):
return len(self.__weaponDpsMap) > 0
def clearFactorReloadDependentData(self):
# Here we clear all data known to rely on cycle parameters
# (which, in turn, relies on factor reload flag)
self.__weaponDpsMap.clear()
self.__remoteRepMap.clear()
self.__capStable = None
self.__capState = None
self.__capUsed = None
self.__capRecharge = None
@property
def targetResists(self):

View File

@@ -507,13 +507,6 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
rrAmount = module.getModifiedItemAttr("powerTransferAmount", 0)
else:
return None, 0
if rrAmount:
cycleParams = self.getCycleParameters()
if cycleParams is None:
return None, 0
rrAmount *= 1 / (cycleParams.averageTime / 1000)
if module.item.group.name == "Ancillary Remote Armor Repairer" and module.charge:
rrAmount *= module.getModifiedItemAttr("chargedArmorDamageMultiplier", 1)
return rrType, rrAmount
@@ -522,6 +515,14 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
rrType, rrAmount = self.__baseRemoteReps
if rrAmount:
cycleParams = self.getCycleParameters()
if cycleParams is None:
return None, 0
rrAmount *= 1 / (cycleParams.averageTime / 1000)
if self.item.group.name == "Ancillary Remote Armor Repairer" and self.charge:
rrAmount *= self.getModifiedItemAttr("chargedArmorDamageMultiplier", 1)
if rrType and rrAmount and self.item.group.name == "Mutadaptive Remote Armor Repairer":
spoolType, spoolAmount = resolveSpoolOptions(spoolOptions, self)
spoolBoost = calculateSpoolup(

View File

@@ -99,6 +99,11 @@ class BoosterView(d.Display):
event.Skip()
def fitChanged(self, event):
event.Skip()
activeFitID = self.mainFrame.getActiveFit()
if activeFitID is not None and event.fitID is not None and event.fitID != activeFitID:
return
sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID)
@@ -108,7 +113,6 @@ class BoosterView(d.Display):
if event.fitID is None and self.lastFitId is not None:
self.DeleteAllItems()
self.lastFitId = None
event.Skip()
return
self.original = fit.boosters if fit is not None else None
@@ -127,7 +131,6 @@ class BoosterView(d.Display):
self.unselectAll()
self.update(self.boosters)
event.Skip()
def addItem(self, event):
item = Market.getInstance().getItem(event.itemID, eager='group')

View File

@@ -135,6 +135,11 @@ class CargoView(d.Display):
copy=wx.GetMouseState().GetModifiers() == wx.MOD_CONTROL))
def fitChanged(self, event):
event.Skip()
activeFitID = self.mainFrame.getActiveFit()
if activeFitID is not None and event.fitID is not None and event.fitID != activeFitID:
return
sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID)
@@ -144,7 +149,6 @@ class CargoView(d.Display):
if event.fitID is None and self.lastFitId is not None:
self.DeleteAllItems()
self.lastFitId = None
event.Skip()
return
self.original = fit.cargo if fit is not None else None
@@ -164,7 +168,6 @@ class CargoView(d.Display):
self.populate(self.cargo)
self.refresh(self.cargo)
event.Skip()
def onLeftDoubleClick(self, event):
row, _ = self.HitTest(event.Position)

View File

@@ -124,6 +124,11 @@ class CommandView(d.Display):
return fit.name
def fitChanged(self, event):
event.Skip()
activeFitID = self.mainFrame.getActiveFit()
if activeFitID is not None and event.fitID is not None and event.fitID != activeFitID:
return
sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID)
@@ -135,7 +140,6 @@ class CommandView(d.Display):
if event.fitID is None and self.lastFitId is not None:
self.DeleteAllItems()
self.lastFitId = None
event.Skip()
return
if event.fitID != self.lastFitId:
@@ -150,8 +154,6 @@ class CommandView(d.Display):
self.refreshContents(fit)
event.Skip()
def refreshContents(self, fit):
stuff = []
if fit is not None:

View File

@@ -199,6 +199,11 @@ class DroneView(Display):
drone.item.name)
def fitChanged(self, event):
event.Skip()
activeFitID = self.mainFrame.getActiveFit()
if activeFitID is not None and event.fitID is not None and event.fitID != activeFitID:
return
sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID)
@@ -208,7 +213,6 @@ class DroneView(Display):
if event.fitID is None and self.lastFitId is not None:
self.DeleteAllItems()
self.lastFitId = None
event.Skip()
return
self.original = fit.drones if fit is not None else None
@@ -228,7 +232,6 @@ class DroneView(Display):
self.unselectAll()
self.update(self.drones)
event.Skip()
def addItem(self, event):
item = Market.getInstance().getItem(event.itemID, eager='group.category')

View File

@@ -88,8 +88,12 @@ class FighterView(wx.Panel):
self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged)
def fitChanged(self, event):
sFit = Fit.getInstance()
event.Skip()
activeFitID = self.mainFrame.getActiveFit()
if activeFitID is not None and event.fitID is not None and event.fitID != activeFitID:
return
sFit = Fit.getInstance()
fit = sFit.getFit(activeFitID)
if fit:
@@ -113,8 +117,6 @@ class FighterView(wx.Panel):
self.Refresh()
event.Skip()
class FighterDisplay(d.Display):
@@ -242,6 +244,11 @@ class FighterDisplay(d.Display):
return orderPos, abilityEffectIDs, fighter.item.name
def fitChanged(self, event):
event.Skip()
activeFitID = self.mainFrame.getActiveFit()
if activeFitID is not None and event.fitID is not None and event.fitID != activeFitID:
return
sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID)
@@ -251,7 +258,6 @@ class FighterDisplay(d.Display):
if event.fitID is None and self.lastFitId is not None:
self.DeleteAllItems()
self.lastFitId = None
event.Skip()
return
self.original = fit.fighters if fit is not None else None
@@ -271,7 +277,6 @@ class FighterDisplay(d.Display):
self.unselectAll()
self.update(self.fighters)
event.Skip()
def addItem(self, event):
item = Market.getInstance().getItem(event.itemID, eager='group.category')

View File

@@ -78,8 +78,12 @@ class ImplantView(wx.Panel):
self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged)
def fitChanged(self, event):
sFit = Fit.getInstance()
event.Skip()
activeFitID = self.mainFrame.getActiveFit()
if activeFitID is not None and event.fitID is not None and event.fitID != activeFitID:
return
sFit = Fit.getInstance()
fit = sFit.getFit(activeFitID)
if fit:
self.source = fit.implantSource
@@ -91,8 +95,6 @@ class ImplantView(wx.Panel):
self.rbFit.Enable(fit is not None)
self.rbChar.Enable(fit is not None)
event.Skip()
def OnRadioSelect(self, event):
fitID = self.mainFrame.getActiveFit()
if fitID is not None:
@@ -152,6 +154,11 @@ class ImplantDisplay(d.Display):
event.Skip()
def fitChanged(self, event):
event.Skip()
activeFitID = self.mainFrame.getActiveFit()
if activeFitID is not None and event.fitID is not None and event.fitID != activeFitID:
return
sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID)
@@ -161,7 +168,6 @@ class ImplantDisplay(d.Display):
if event.fitID is None and self.lastFitId is not None:
self.DeleteAllItems()
self.lastFitId = None
event.Skip()
return
self.original = fit.appliedImplants if fit is not None else None
@@ -180,7 +186,6 @@ class ImplantDisplay(d.Display):
self.unselectAll()
self.update(self.implants)
event.Skip()
def addItem(self, event):
item = Market.getInstance().getItem(event.itemID, eager='group.category')

View File

@@ -30,6 +30,11 @@ class NotesView(wx.Panel):
event.Skip()
def fitChanged(self, event):
event.Skip()
activeFitID = self.mainFrame.getActiveFit()
if activeFitID is not None and event.fitID is not None and event.fitID != activeFitID:
return
sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID)
@@ -43,14 +48,11 @@ class NotesView(wx.Panel):
if event.fitID is None and self.lastFitId is not None:
self.lastFitId = None
event.Skip()
return
elif event.fitID != self.lastFitId:
self.lastFitId = event.fitID
self.editNotes.SetValue(fit.notes or "")
event.Skip()
def onText(self, event):
# delay the save so we're not writing to sqlite on every keystroke
self.saveTimer.Stop() # cancel the existing timer

View File

@@ -168,6 +168,11 @@ class ProjectedView(d.Display):
return fit.name
def fitChanged(self, event):
event.Skip()
activeFitID = self.mainFrame.getActiveFit()
if activeFitID is not None and event.fitID is not None and event.fitID != activeFitID:
return
sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID)
# pyfalog.debug('ProjectedView::fitChanged: {}', repr(fit))
@@ -178,7 +183,6 @@ class ProjectedView(d.Display):
if event.fitID is None and self.lastFitId is not None:
self.DeleteAllItems()
self.lastFitId = None
event.Skip()
return
@@ -195,8 +199,6 @@ class ProjectedView(d.Display):
self.refreshContents(fit)
event.Skip()
def refreshContents(self, fit):
stuff = []
if fit is not None:

View File

@@ -604,8 +604,11 @@ class FittingView(d.Display):
self.populate(self.mods)
def fitChanged(self, event):
event.Skip()
if not self:
event.Skip()
return
activeFitID = self.mainFrame.getActiveFit()
if activeFitID is not None and event.fitID is not None and event.fitID != activeFitID:
return
try:
if self.activeFitID is not None and self.activeFitID == event.fitID:
@@ -619,8 +622,6 @@ class FittingView(d.Display):
self.Show(self.activeFitID is not None and self.activeFitID == event.fitID)
except RuntimeError:
pyfalog.error("Caught dead object")
finally:
event.Skip()
def spawnMenu(self, event):
if self.activeFitID is None or self.getColumn(self.screenToClientFixed(event.Position)) == self.getColIndex(State):

View File

@@ -214,6 +214,10 @@ class CharacterSelection(wx.Panel):
"""
When fit is changed, or new fit is selected
"""
event.Skip()
activeFitID = self.mainFrame.getActiveFit()
if activeFitID is not None and event.fitID is not None and event.fitID != activeFitID:
return
self.charChoice.Enable(event.fitID is not None)
choice = self.charChoice
sFit = Fit.getInstance()
@@ -257,8 +261,6 @@ class CharacterSelection(wx.Panel):
self.toggleRefreshButton()
event.Skip()
def exportSkills(self, evt):
skillsMap = self._buildSkillsTooltipCondensed(self.reqs, skillsMap={})

View File

@@ -176,6 +176,10 @@ class MainMenuBar(wx.MenuBar):
self.mainFrame.Bind(EVT_FIT_RENAMED, self.fitRenamed)
def fitChanged(self, event):
event.Skip()
activeFitID = self.mainFrame.getActiveFit()
if activeFitID is not None and event.fitID is not None and event.fitID != activeFitID:
return
enable = event.fitID is not None
self.Enable(wx.ID_SAVEAS, enable)
self.Enable(wx.ID_COPY, enable)
@@ -203,8 +207,6 @@ class MainMenuBar(wx.MenuBar):
else:
self.ignoreRestrictionItem.SetItemLabel("Disable Fitting Re&strictions")
event.Skip()
def fitRenamed(self, event):
self.refreshUndo()
event.Skip()

View File

@@ -97,11 +97,14 @@ class ShipBrowser(wx.Panel):
self.navpanel.gotoStage(stage, stageData)
def RefreshList(self, event):
stage = self.GetActiveStage()
event.Skip()
activeFitID = self.mainFrame.getActiveFit()
if activeFitID is not None and event.fitID is not None and event.fitID != activeFitID:
return
stage = self.GetActiveStage()
if stage in (3, 4, 5):
self.lpane.RefreshList(True)
event.Skip()
def SizeRefreshList(self, event):
self.Layout()

View File

@@ -69,11 +69,14 @@ class StatsPane(wx.Panel):
pyfalog.error("Unknown setting for view: {0}", aView)
def fitChanged(self, event):
event.Skip()
activeFitID = self.mainFrame.getActiveFit()
if activeFitID is not None and event.fitID is not None and event.fitID != activeFitID:
return
sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID)
for view in self.views:
view.refreshPanel(fit)
event.Skip()
def __init__(self, parent):
wx.Panel.__init__(self, parent)

View File

@@ -249,8 +249,9 @@ class Fit:
for fit in set(self._loadedFits):
if fit is None:
continue
if fit.hasDpsData:
self.recalc(fit)
if fit.calculated:
fit.factorReload = self.serviceFittingOptions['useGlobalForceReload']
fit.clearFactorReloadDependentData()
fitIDs.add(fit.ID)
return fitIDs
@@ -477,7 +478,6 @@ class Fit:
fit.factorReload = self.serviceFittingOptions["useGlobalForceReload"]
fit.clear()
fit.calculateModifiedAttributes()
pyfalog.info("=" * 10 + "recalc time: " + str(time() - start_time) + "=" * 10)