Finish making the EHP/HP switching code work exactly the way we want (not change the active damage pattern, as that has lots of unintended side effects)

This commit is contained in:
cncfanatics
2010-10-25 07:31:24 +02:00
parent 44618d612d
commit 305b32e777
3 changed files with 57 additions and 31 deletions

2
eos

Submodule eos updated: 474d2b0d46...9278fa9318

View File

@@ -19,15 +19,22 @@
import wx
from gui.statsView import StatsView
from gui import builtinStatsViews
from gui import bitmapLoader
from util import formatAmount
import gui.mainFrame
import gui.builtinStatsViews.resistancesViewFull as rvf
import service
class RechargeViewFull(StatsView):
name = "rechargeViewFull"
def __init__(self, parent):
StatsView.__init__(self)
self.parent = parent
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
self.mainFrame.Bind(rvf.RAW_HP_ENABLED, self.showRaw)
self.mainFrame.Bind(rvf.EFFECTIVE_HP_ENABLED, self.showEffective)
self.effective = True
def getHeaderText(self, fit):
return "Recharge rates"
@@ -35,6 +42,18 @@ class RechargeViewFull(StatsView):
width, height = self.parent.GetTextExtent( text )
return width
def showRaw(self, event):
self.effective = False
sFit = service.Fit.getInstance()
self.refreshPanel(sFit.getFit(self.mainFrame.getActiveFit()))
event.Skip()
def showEffective(self, event):
self.effective = True
sFit = service.Fit.getInstance()
self.refreshPanel(sFit.getFit(self.mainFrame.getActiveFit()))
event.Skip()
def populatePanel(self, contentPanel, headerPanel):
contentSizer = contentPanel.GetSizer()
@@ -83,9 +102,9 @@ class RechargeViewFull(StatsView):
for stability in ("reinforced", "sustained"):
if stability == "reinforced" and fit != None:
tank = fit.effectiveTank
tank = fit.effectiveTank if self.effective else fit.tank
elif stability == "sustained" and fit != None:
tank = fit.effectiveSustainableTank
tank = fit.effectiveSustainableTank if self.effective else fit.sustainableTank
else:
tank = None
@@ -98,7 +117,7 @@ class RechargeViewFull(StatsView):
if fit is not None:
label = getattr(self, "labelTankSustainedShieldPassive")
value = fit.effectiveTank["passiveShield"]
value = fit.effectiveTank["passiveShield"] if self.effective else fit.tank["passiveShield"]
label.SetLabel(formatAmount(value, 3, 0, 9))
else:

View File

@@ -27,15 +27,20 @@ import service
import gui.mainFrame
import gui.fittingView as fv
EffictiveHpEnabled, EFFECTIVE_HP_ENABLED = wx.lib.newevent.NewEvent()
RawHpEnabled, RAW_HP_ENABLED = wx.lib.newevent.NewEvent()
class ResistancesViewFull(StatsView):
name = "resistancesViewFull"
def __init__(self, parent):
StatsView.__init__(self)
self.parent = parent
self._cachedValues = []
self.showEffective = True
self.activeFit = None
self.oldPattern = None
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
self.mainFrame.Bind(EFFECTIVE_HP_ENABLED, self.ehpSwitch)
self.mainFrame.Bind(RAW_HP_ENABLED, self.hpSwitch)
def getHeaderText(self, fit):
return "Resistances"
@@ -152,34 +157,36 @@ class ResistancesViewFull(StatsView):
self.stEHPs.SetToolTip(wx.ToolTip("Click to toggle between effective HP and raw HP"))
def toggleEHP(self,event):
sFit = service.Fit.getInstance()
self.activeFit = self.mainFrame.getActiveFit()
currPattern = sFit.getDamagePattern(self.activeFit)
if self.oldPattern is None and currPattern is not None:
self.oldPattern = currPattern
sFit.setDamagePattern(self.activeFit, None)
self.stEHPs.SetLabel(" HP ")
def toggleEHP(self, event):
if self.stEHPs.GetLabel() == " HP ":
wx.PostEvent(self.mainFrame, EffictiveHpEnabled())
else:
sFit.setDamagePattern(self.activeFit, self.oldPattern or service.DamagePattern.getInstance().getDamagePattern("Uniform"))
self.oldPattern = None
self.stEHPs.SetLabel(" EHP ")
wx.PostEvent(self.mainFrame, RawHpEnabled())
wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=self.activeFit))
def ehpSwitch(self, event):
self.showEffective = True
sFit = service.Fit.getInstance()
self.refreshPanel(sFit.getFit(self.mainFrame.getActiveFit()))
event.Skip()
def hpSwitch(self, event):
self.showEffective = False
sFit = service.Fit.getInstance()
self.refreshPanel(sFit.getFit(self.mainFrame.getActiveFit()))
event.Skip()
def refreshPanel(self, fit):
#If we did anything intresting, we'd update our labels to reflect the new fit's stats here
if fit is None:
self.stEHPs.SetLabel(" EHP ")
elif fit.ID != self.activeFit:
if fit.damagePattern is None:
self.stEHPs.SetLabel(" HP ")
else:
self.stEHPs.SetLabel(" EHP ")
sFit = service.Fit.getInstance()
sDP = service.DamagePattern.getInstance()
sFit.setDamagePattern(fit.ID, sDP.getDamagePattern("Uniform"))
if fit is None and not self.showEffective:
self.showEffective = True
wx.PostEvent(self.mainFrame, EffictiveHpEnabled())
return
elif fit is not None and fit.ID != self.activeFit and not self.showEffective:
self.showEffective = True
wx.PostEvent(self.mainFrame, EffictiveHpEnabled())
return
self.stEHPs.SetLabel(" EHP " if self.showEffective else " HP ")
self.activeFit = fit.ID if fit is not None else None
for tankType in ("shield", "armor", "hull"):
@@ -196,7 +203,7 @@ class ResistancesViewFull(StatsView):
lbl.SetValue(resonance)
ehp = fit.ehp if fit is not None else None
ehp = (fit.ehp if self.showEffective else fit.hp) if fit is not None else None
total = 0
for tankType in ("shield", "armor", "hull"):
lbl = getattr(self, "labelResistance%sEhp" % tankType.capitalize())
@@ -209,7 +216,7 @@ class ResistancesViewFull(StatsView):
self.labelEhp.SetLabel("%s" % formatAmount(total, 3, 0, 9))
if self.stEHPs.GetLabel() == " EHP ":
if self.showEffective:
self.stEff.SetLabel("( Effective HP: ")
self.labelEhp.SetToolTip(wx.ToolTip("Effective: %d HP" % total))
else:
@@ -217,7 +224,7 @@ class ResistancesViewFull(StatsView):
self.labelEhp.SetToolTip(wx.ToolTip("Raw: %d HP" % total))
damagePattern = fit.damagePattern if fit is not None else None
damagePattern = fit.damagePattern if fit is not None and self.showEffective else None
total = sum((damagePattern.emAmount, damagePattern.thermalAmount,
damagePattern.kineticAmount, damagePattern.explosiveAmount)) if damagePattern is not None else 0