Fix crash on opening mutated BCS stats
This commit is contained in:
@@ -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: "m³"),
|
||||
lambda v: v,
|
||||
lambda u: "m³",
|
||||
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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user