diff --git a/eos/gamedata.py b/eos/gamedata.py index 17aab7a87..f8345ac87 100644 --- a/eos/gamedata.py +++ b/eos/gamedata.py @@ -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 diff --git a/gui/builtinItemStatsViews/itemAttributes.py b/gui/builtinItemStatsViews/itemAttributes.py index 6081b3f24..828c15ff7 100644 --- a/gui/builtinItemStatsViews/itemAttributes.py +++ b/gui/builtinItemStatsViews/itemAttributes.py @@ -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) diff --git a/gui/builtinItemStatsViews/itemMutator.py b/gui/builtinItemStatsViews/itemMutator.py index 2cd0e17aa..e196621a3 100644 --- a/gui/builtinItemStatsViews/itemMutator.py +++ b/gui/builtinItemStatsViews/itemMutator.py @@ -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()