Fix crash on opening mutated BCS stats

This commit is contained in:
DarkPhoenix
2018-11-15 16:19:20 +03:00
parent 19de7e40dc
commit f664a1cad3
3 changed files with 60 additions and 39 deletions

View File

@@ -569,53 +569,65 @@ class Unit(EqBase):
from ms to s) """
# Each entry contains:
# Function to convert value to display value
# Function to convert value to display format (which sometimes can be a string)
# Function which controls unit name used with attribute
# Function to convert display value to value
# Function which controls attribute unit name used with attribute
return {
"Inverse Absolute Percent": (
lambda v: (1 - v) * 100,
lambda d: -1 * (d / 100) + 1,
lambda u: u),
lambda v: (1 - v) * 100,
lambda u: u,
lambda d: -1 * (d / 100) + 1),
"Inversed Modifier Percent": (
lambda v: (1 - v) * 100,
lambda d: -1 * (d / 100) + 1,
lambda u: u),
lambda v: (1 - v) * 100,
lambda u: u,
lambda d: -1 * (d / 100) + 1),
"Modifier Percent": (
lambda v: (v - 1) * 100,
lambda v: ("%+.2f" if ((v - 1) * 100) % 1 else "%+d") % ((v - 1) * 100),
lambda d: (d / 100) + 1,
lambda u: u),
lambda u: u,
lambda d: (d / 100) + 1),
"Volume": (
lambda v: v,
lambda d: d,
lambda u: ""),
lambda v: v,
lambda u: "",
lambda d: d),
"Sizeclass": (
lambda v: v,
lambda d: d,
lambda u: ""),
lambda v: v,
lambda u: "",
lambda d: d),
"Absolute Percent": (
lambda v: (v * 100),
lambda d: d / 100,
lambda u: u),
lambda v: v * 100,
lambda v: v * 100,
lambda u: u,
lambda d: d / 100),
"Milliseconds": (
lambda v: v / 1000.0,
lambda d: d * 1000.0,
lambda u: u),
lambda v: v / 1000,
lambda v: v / 1000,
lambda u: u,
lambda d: d * 1000),
"Boolean": (
lambda v: "Yes" if v == 1 else "No",
lambda d: 1.0 if d == "Yes" else 0.0,
lambda u: ""),
lambda v: True if v else False,
lambda v: "Yes" if v else "No",
lambda u: "",
lambda d: 1.0 if d == "Yes" else 0.0),
"typeID": (
self.itemIDCallback,
None, # we could probably convert these back if we really tried hard enough
lambda u: ""),
self.itemIDCallback,
lambda u: "",
None), # we could probably convert these back if we really tried hard enough
"groupID": (
self.groupIDCallback,
None,
lambda u: ""),
self.groupIDCallback,
lambda u: "",
None),
"attributeID": (
self.attributeIDCallback,
None,
lambda u: ""),
self.attributeIDCallback,
lambda u: "",
None),
}
@staticmethod
@@ -638,22 +650,31 @@ class Unit(EqBase):
attribute = eos.db.getAttributeInfo(v, eager="unit")
return "%s (%d)" % (attribute.name.capitalize(), v)
def TranslateValue(self, value):
def PreformatValue(self, value):
"""Attributes have to be translated certain ways based on their unit (ex: decimals converting to percentages).
This allows us to get an easy representation of how the attribute should be printed """
override = self.translations.get(self.name)
if override is not None:
return override[0](value), override[2](self.displayName)
return override[1](value), override[2](self.displayName)
return value, self.displayName
def SimplifyValue(self, value):
"""Takes the internal representation value and convert it into the display value"""
override = self.translations.get(self.name)
if override is not None:
return override[0](value)
return value
def ComplicateValue(self, value):
"""Takes the display value and turns it back into the internal representation of it"""
override = self.translations.get(self.name)
if override is not None:
return override[1](value)
return override[3](value)
return value

View File

@@ -214,14 +214,14 @@ class ItemParams(wx.Panel):
if self.toggleView != 1:
valueUnit = str(value)
elif info and info.unit:
valueUnit = self.FormatValue(*info.unit.TranslateValue(value))
valueUnit = self.FormatValue(*info.unit.PreformatValue(value))
else:
valueUnit = formatAmount(value, 3, 0, 0)
if self.toggleView != 1:
valueUnitDefault = str(valueDefault)
elif info and info.unit:
valueUnitDefault = self.FormatValue(*info.unit.TranslateValue(valueDefault))
valueUnitDefault = self.FormatValue(*info.unit.PreformatValue(valueDefault))
else:
valueUnitDefault = formatAmount(valueDefault, 3, 0, 0)

View File

@@ -61,10 +61,10 @@ class ItemMutator(wx.Panel):
headingSizer.Add(displayName, 3, wx.ALL | wx.EXPAND, 0)
range_low = wx.StaticText(self, wx.ID_ANY, ItemParams.FormatValue(*m.attribute.unit.TranslateValue(round(worse_range[0], 3))))
range_low = wx.StaticText(self, wx.ID_ANY, ItemParams.FormatValue(*m.attribute.unit.PreformatValue(round(worse_range[0], 3))))
range_low.SetForegroundColour(self.goodColor if worse_range[2] else self.badColor)
range_high = wx.StaticText(self, wx.ID_ANY, ItemParams.FormatValue(*m.attribute.unit.TranslateValue(round(better_range[0], 3))))
range_high = wx.StaticText(self, wx.ID_ANY, ItemParams.FormatValue(*m.attribute.unit.PreformatValue(round(better_range[0], 3))))
range_high.SetForegroundColour(self.goodColor if better_range[2] else self.badColor)
headingSizer.Add(range_low, 0, wx.ALL | wx.EXPAND, 0)
@@ -74,11 +74,11 @@ class ItemMutator(wx.Panel):
mainSizer.Add(headingSizer, 0, wx.ALL | wx.EXPAND, 5)
slider = AttributeSlider(parent=self,
baseValue=m.attribute.unit.TranslateValue(m.baseValue)[0],
minValue=m.attribute.unit.TranslateValue(min_t[0])[0],
maxValue=m.attribute.unit.TranslateValue(max_t[0])[0],
baseValue=m.attribute.unit.SimplifyValue(m.baseValue),
minValue=m.attribute.unit.SimplifyValue(min_t[0]),
maxValue=m.attribute.unit.SimplifyValue(max_t[0]),
inverse=better_range is min_t)
slider.SetValue(m.attribute.unit.TranslateValue(m.value)[0], False)
slider.SetValue(m.attribute.unit.SimplifyValue(m.value), False)
slider.Bind(EVT_VALUE_CHANGED, self.changeMutatedValue)
self.event_mapping[slider] = m
mainSizer.Add(slider, 0, wx.RIGHT | wx.LEFT | wx.EXPAND, 10)
@@ -127,7 +127,7 @@ class ItemMutator(wx.Panel):
for slider, m in self.event_mapping.items():
value = sFit.changeMutatedValue(m, m.baseValue)
value = m.attribute.unit.TranslateValue(value)[0]
value = m.attribute.unit.SimplifyValue(value)
slider.SetValue(value)
evt.Skip()
@@ -138,7 +138,7 @@ class ItemMutator(wx.Panel):
for slider, m in self.event_mapping.items():
value = random.uniform(m.minValue, m.maxValue)
value = sFit.changeMutatedValue(m, value)
value = m.attribute.unit.TranslateValue(value)[0]
value = m.attribute.unit.SimplifyValue(value)
slider.SetValue(value)
evt.Skip()