From d93997069d49398c5f72d418f2f5df2ca24c4514 Mon Sep 17 00:00:00 2001 From: Kevin Lyles Date: Sat, 26 Sep 2009 11:39:00 -0500 Subject: [PATCH] Added weight normalization (divide final weight by sum of all weights in scale) Also truncates to 3 decimal places Configured by ww_vars.options.normalizeWights (true/false) --- Upgrade.lua | 24 ++++++++++++++++++++++++ WeightsWatcher.lua | 14 +++++++++++++- config.lua | 5 ++++- 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/Upgrade.lua b/Upgrade.lua index 604d062..38a2255 100644 --- a/Upgrade.lua +++ b/Upgrade.lua @@ -112,6 +112,26 @@ function stringsToFuncs(strTable) return funcTable end +noop_down = [[ + return function(vars) + vars.dataMinorVersion = vars.dataMinorVersion - 1 + return vars + end +]] + + +function upgradeAccountToNormalization(vars) + if not vars.options then + vars.options = {} + end + if vars.options.normalizeWeights == nil then + vars.options.normalizeWeights = true + end + + vars.dataMinorVersion = 2 + return vars +end + function copyDefaultAccountVars() return deepTableCopy(defaultVars) end @@ -139,10 +159,14 @@ end upgradeAccountFunctions = { [0] = { [0] = function(vars) return copyDefaultAccountVars() end, + [1] = function(vars) return upgradeAccountToNormalization(vars) end, }, } downgradeAccountFunctions = { + [0] = { + [2] = noop_down, + }, } upgradeCharFunctions = { diff --git a/WeightsWatcher.lua b/WeightsWatcher.lua index cdcd1c8..1cc313f 100644 --- a/WeightsWatcher.lua +++ b/WeightsWatcher.lua @@ -114,7 +114,7 @@ function WeightsWatcher:displayItemStats(tooltip, ttname) if ww_vars.weightsList[class] then for _, weight in pairs(weights) do if ww_vars.weightsList[class][weight] then - tooltip:AddDoubleLine(weight, WeightsWatcher:calculateWeight(normalStats, socketBonusActive, socketBonusStat, gemStats, ww_vars.weightsList[class][weight])) + tooltip:AddDoubleLine(weight, string.format("%.3f", WeightsWatcher:calculateWeight(normalStats, socketBonusActive, socketBonusStat, gemStats, ww_vars.weightsList[class][weight]))) end end end @@ -161,6 +161,18 @@ function WeightsWatcher:calculateWeight(normalStats, socketBonusActive, socketBo weight = weight + WeightsWatcher:getWeight(value, weightsScale) end end + if ww_vars.options.normalizeWeights == true then + local total = 0 + + for _, value in pairs(weightsScale) do + total = total + value + end + if total == 0 then + -- Avoids a divide by zero + return 0 + end + weight = weight / total + end return weight end diff --git a/config.lua b/config.lua index ced7e54..1170de2 100644 --- a/config.lua +++ b/config.lua @@ -27,7 +27,7 @@ end defaultVars = { dataMajorVersion = 0, - dataMinorVersion = 1, + dataMinorVersion = 2, weightsList = { ["DEATHKNIGHT"] = { ["Blood DPS"] = { @@ -348,6 +348,9 @@ defaultVars = { }, }, }, + options = { + normalizeWeights = true, + }, } defaultCharVars = { -- 1.7.9.5