diff --git a/graphs/data/fitRemoteReps/calc.py b/graphs/data/fitRemoteReps/calc.py index 57b018323..2473682e5 100644 --- a/graphs/data/fitRemoteReps/calc.py +++ b/graphs/data/fitRemoteReps/calc.py @@ -28,21 +28,26 @@ def getApplicationPerKey(src, distance): for mod in src.item.activeModulesIter(): if not mod.isRemoteRepping(): continue - applicationMap[mod] = 1 if distance is None else calculateRangeFactor( - srcOptimalRange=mod.maxRange or 0, - srcFalloffRange=mod.falloff or 0, - distance=distance) + if distance is None: + applicationMap[mod] = 1 + elif not GraphSettings.getInstance().get('ignoreLockRange') and distance > src.item.maxTargetRange: + applicationMap[mod] = 0 + else: + applicationMap[mod] = calculateRangeFactor( + srcOptimalRange=mod.maxRange or 0, + srcFalloffRange=mod.falloff or 0, + distance=distance) for drone in src.item.activeDronesIter(): if not drone.isRemoteRepping(): continue - if ( - distance is None or - GraphSettings.getInstance().get('ignoreDCR') or - distance <= src.item.extraAttributes['droneControlRange'] - ): + if distance is None: applicationMap[drone] = 1 - else: + elif not GraphSettings.getInstance().get('ignoreDCR') and distance > src.item.extraAttributes['droneControlRange']: applicationMap[drone] = 0 + elif not GraphSettings.getInstance().get('ignoreLockRange') and distance > src.item.maxTargetRange: + applicationMap[drone] = 0 + else: + applicationMap[drone] = 1 # Ensure consistent results - round off a little to avoid float errors for k, v in applicationMap.items(): applicationMap[k] = floatUnerr(v) diff --git a/gui/builtinContextMenus/__init__.py b/gui/builtinContextMenus/__init__.py index 43b081a7e..bda64884b 100644 --- a/gui/builtinContextMenus/__init__.py +++ b/gui/builtinContextMenus/__init__.py @@ -44,8 +44,9 @@ from gui.builtinContextMenus import damagePatternChange from gui.builtinContextMenus import factorReload from gui.builtinContextMenus.targetProfile import switcher # Graph extra options -from gui.builtinContextMenus import graphDmgIgnoreResists from gui.builtinContextMenus import graphDmgApplyProjected +from gui.builtinContextMenus import graphDmgIgnoreResists +from gui.builtinContextMenus import graphLockRange from gui.builtinContextMenus import graphDroneControlRange from gui.builtinContextMenus import graphDmgDroneMode # Additions panel menus diff --git a/gui/builtinContextMenus/graphLockRange.py b/gui/builtinContextMenus/graphLockRange.py new file mode 100644 index 000000000..b592be2c1 --- /dev/null +++ b/gui/builtinContextMenus/graphLockRange.py @@ -0,0 +1,30 @@ +# noinspection PyPackageRequirements +import wx + +import gui.globalEvents as GE +import gui.mainFrame +from gui.contextMenu import ContextMenuUnconditional +from service.settings import GraphSettings + + +class GraphIgnoreLockRangeMenu(ContextMenuUnconditional): + + def __init__(self): + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = GraphSettings.getInstance() + + def display(self, callingWindow, srcContext): + return srcContext in ('dmgStatsGraph', 'remoteRepsGraph', 'ewarStatsGraph') + + def getText(self, callingWindow, itmContext): + return 'Ignore Lock Range' + + def activate(self, callingWindow, fullContext, i): + self.settings.set('ignoreLockRange', not self.settings.get('ignoreLockRange')) + wx.PostEvent(self.mainFrame, GE.GraphOptionChanged()) + + def isChecked(self, i): + return self.settings.get('ignoreLockRange') + + +GraphIgnoreLockRangeMenu.register() diff --git a/service/settings.py b/service/settings.py index dcaa16bf6..fe5243566 100644 --- a/service/settings.py +++ b/service/settings.py @@ -521,6 +521,7 @@ class GraphSettings: 'mobileDroneMode': GraphDpsDroneMode.auto, 'ignoreDCR': False, 'ignoreResists': True, + 'ignoreLockRange': True, 'applyProjected': True} self.settings = SettingsProvider.getInstance().getSettings('graphSettings', defaults)