Show shield HP/EHP based on HP selection in main panel

This commit is contained in:
DarkPhoenix
2019-08-16 09:31:02 +03:00
parent 477c43884a
commit c142a011a0
5 changed files with 46 additions and 13 deletions

View File

@@ -18,6 +18,7 @@
# =============================================================================
import gui.mainFrame
from graphs.data.base import FitGraph, XDef, YDef, Input
from .getter import (
Time2ShieldAmountGetter, Time2ShieldRegenGetter,
@@ -29,24 +30,29 @@ class FitShieldRegenGraph(FitGraph):
# UI stuff
internalName = 'shieldRegenGraph'
name = 'Shield Regeneration'
xDefs = [
XDef(handle='time', unit='s', label='Time', mainInput=('time', 's')),
XDef(handle='shieldAmount', unit='EHP', label='Shield amount', mainInput=('shieldAmount', '%')),
XDef(handle='shieldAmount', unit='HP', label='Shield amount', mainInput=('shieldAmount', '%')),
XDef(handle='shieldAmount', unit='%', label='Shield amount', mainInput=('shieldAmount', '%'))]
yDefs = [
YDef(handle='shieldAmount', unit='EHP', label='Shield amount'),
YDef(handle='shieldAmount', unit='HP', label='Shield amount'),
YDef(handle='shieldRegen', unit='EHP/s', label='Shield regen'),
YDef(handle='shieldRegen', unit='HP/s', label='Shield regen')]
inputs = [
Input(handle='time', unit='s', label='Time', iconID=1392, defaultValue=120, defaultRange=(0, 300), mainOnly=True),
Input(handle='shieldAmount', unit='%', label='Shield amount', iconID=1384, defaultValue=25, defaultRange=(0, 100), mainOnly=True)]
srcExtraCols = ('ShieldAmount', 'ShieldTime')
usesHpEffectivity = True
@property
def xDefs(self):
return [
XDef(handle='time', unit='s', label='Time', mainInput=('time', 's')),
XDef(handle='shieldAmount', unit='EHP' if self.isEffective else 'HP', label='Shield amount', mainInput=('shieldAmount', '%')),
XDef(handle='shieldAmount', unit='%', label='Shield amount', mainInput=('shieldAmount', '%'))]
@property
def yDefs(self):
return [
YDef(handle='shieldAmount', unit='EHP' if self.isEffective else 'HP', label='Shield amount'),
YDef(handle='shieldRegen', unit='EHP/s' if self.isEffective else 'HP/s', label='Shield regen')]
# Calculation stuff
_normalizers = {
('shieldAmount', '%'): lambda v, src, tgt: v / 100 * src.item.ship.getModifiedItemAttr('shieldCapacity'),
# Needed only for "x mark" support, to convert EHP x into normalized value
('shieldAmount', 'EHP'): lambda v, src, tgt: v / src.item.damagePattern.effectivify(src.item, 1, 'shield')}
_limiters = {
'shieldAmount': lambda src, tgt: (0, src.item.ship.getModifiedItemAttr('shieldCapacity'))}
@@ -59,3 +65,7 @@ class FitShieldRegenGraph(FitGraph):
('shieldAmount', '%'): lambda v, src, tgt: v * 100 / src.item.ship.getModifiedItemAttr('shieldCapacity'),
('shieldAmount', 'EHP'): lambda v, src, tgt: src.item.damagePattern.effectivify(src.item, v, 'shield'),
('shieldRegen', 'EHP/s'): lambda v, src, tgt: src.item.damagePattern.effectivify(src.item, v, 'shield')}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.isEffective = gui.mainFrame.MainFrame.getInstance().statsPane.nameViewMap['resistancesViewFull'].showEffective

View File

@@ -88,6 +88,7 @@ class GraphFrame(AuxiliaryFrame):
self.mainFrame.Bind(GE.TARGET_PROFILE_REMOVED, self.OnProfileRemoved)
self.mainFrame.Bind(RESIST_MODE_CHANGED, self.OnResistModeChanged)
self.mainFrame.Bind(GE.GRAPH_OPTION_CHANGED, self.OnGraphOptionChanged)
self.mainFrame.Bind(GE.EFFECTIVE_HP_TOGGLED, self.OnEffectiveHpToggled)
self.Layout()
self.UpdateWindowSize()
@@ -171,6 +172,23 @@ class GraphFrame(AuxiliaryFrame):
self.clearCache(reason=GraphCacheCleanupReason.optionChanged)
self.draw()
def OnEffectiveHpToggled(self, event):
event.Skip()
currentView = self.getView()
# Redraw graph if needed
if currentView.usesHpEffectivity:
currentView.isEffective = event.effective
self.ctrlPanel.refreshAxeLabels(restoreSelection=True)
self.clearCache(reason=GraphCacheCleanupReason.hpEffectivityChanged)
self.draw()
# Even if graph is not selected, keep it updated
for idx in range(self.graphSelection.GetCount()):
view = self.getView(idx=idx)
if view is currentView:
continue
if view.usesHpEffectivity:
view.isEffective = event.effective
def OnGraphSwitched(self, event):
view = self.getView()
GraphSettings.getInstance().set('selectedGraph', view.internalName)
@@ -189,10 +207,13 @@ class GraphFrame(AuxiliaryFrame):
self.mainFrame.Unbind(GE.TARGET_PROFILE_REMOVED, handler=self.OnProfileRemoved)
self.mainFrame.Unbind(RESIST_MODE_CHANGED, handler=self.OnResistModeChanged)
self.mainFrame.Unbind(GE.GRAPH_OPTION_CHANGED, handler=self.OnGraphOptionChanged)
self.mainFrame.Unbind(GE.EFFECTIVE_HP_TOGGLED, handler=self.OnEffectiveHpToggled)
event.Skip()
def getView(self):
return self.graphSelection.GetClientData(self.graphSelection.GetSelection())
def getView(self, idx=None):
if idx is None:
idx = self.graphSelection.GetSelection()
return self.graphSelection.GetClientData(idx)
def clearCache(self, reason, extraData=None):
self.getView().clearCache(reason, extraData)

View File

@@ -46,10 +46,10 @@ class RechargeViewFull(StatsView):
return width
def toggleEffective(self, event):
event.Skip()
self.effective = event.effective
sFit = Fit.getInstance()
self.refreshPanel(sFit.getFit(self.mainFrame.getActiveFit()))
event.Skip()
def populatePanel(self, contentPanel, headerPanel):
contentSizer = contentPanel.GetSizer()

View File

@@ -162,6 +162,7 @@ class ResistancesViewFull(StatsView):
wx.PostEvent(self.mainFrame, GE.EffectiveHpToggled(effective=self.stEHPs.GetLabel() == "HP"))
def ehpSwitch(self, event):
event.Skip()
self.showEffective = event.effective
fitID = self.mainFrame.getActiveFit()
wx.PostEvent(self.mainFrame, GE.FitChanged(fitIDs=(fitID,)))

View File

@@ -130,6 +130,7 @@ class GraphCacheCleanupReason(IntEnum):
inputChanged = autoId()
optionChanged = autoId()
resistModeChanged = autoId()
hpEffectivityChanged = autoId()
@unique