I'm using oUF and have 2 separate addons. In the oUF style addon, I have a table of colors that is made up of values from the SavedVariables from the main addon. I am trying to make it so when one the the colors is changed in the options menu of the main addon, the color table gets updated in the oUF style addon. I have about 60 colors and would like to keep the code condensed as much as possible so I don't want to have each option in the main addon update both the SavedVariable and the oUF color table. I would rather have the oUF color table update automatically so that when the color table is called from it returns the current value of the SavedVariable instead of the value that the SavedVariable was when the color table was initialized.
My table currently looks like this:
Code:
local db = MyAddon.db.profile
local colors = setmetatable({
power = setmetatable({
["MANA"] = {tonumber(db.oUF.Colors.Power.Mana.r), tonumber(db.oUF.Colors.Power.Mana.g), tonumber(db.oUF.Colors.Power.Mana.b)},
["RAGE"] = {tonumber(db.oUF.Colors.Power.Rage.r), tonumber(db.oUF.Colors.Power.Rage.g), tonumber(db.oUF.Colors.Power.Rage.b)},
["FOCUS"] = {tonumber(db.oUF.Colors.Power.Focus.r), tonumber(db.oUF.Colors.Power.Focus.g), tonumber(db.oUF.Colors.Power.Focus.b)},
["ENERGY"] = {tonumber(db.oUF.Colors.Power.Energy.r), tonumber(db.oUF.Colors.Power.Energy.g), tonumber(db.oUF.Colors.Power.Energy.b)},
["RUNES"] = {tonumber(db.oUF.Colors.Power.Runes.r), tonumber(db.oUF.Colors.Power.Runes.g), tonumber(db.oUF.Colors.Power.Runes.b)},
["RUNIC_POWER"] = {tonumber(db.oUF.Colors.Power.RunicPower.r), tonumber(db.oUF.Colors.Power.RunicPower.g), tonumber(db.oUF.Colors.Power.RunicPower.b)},
["AMMOSLOT"] = {tonumber(db.oUF.Colors.Power.AmmoSlot.r), tonumber(db.oUF.Colors.Power.AmmoSlot.g), tonumber(db.oUF.Colors.Power.AmmoSlot.b)},
["FUEL"] = {tonumber(db.oUF.Colors.Power.Fuel.r), tonumber(db.oUF.Colors.Power.Fuel.g), tonumber(db.oUF.Colors.Power.Fuel.b)},
["POWER_TYPE_STEAM"] = {0.55, 0.57, 0.61},
["POWER_TYPE_PYRITE"] = {0.60, 0.09, 0.17},
}, {__index = oUF.colors.power}),
class = setmetatable({
["WARRIOR"] = {tonumber(db.oUF.Colors.Class.Warrior.r), tonumber(db.oUF.Colors.Class.Warrior.g), tonumber(db.oUF.Colors.Class.Warrior.b)},
["PRIEST"] = {tonumber(db.oUF.Colors.Class.Priest.r), tonumber(db.oUF.Colors.Class.Priest.g), tonumber(db.oUF.Colors.Class.Priest.b)},
["DRUID"] = {tonumber(db.oUF.Colors.Class.Druid.r), tonumber(db.oUF.Colors.Class.Druid.g), tonumber(db.oUF.Colors.Class.Druid.b)},
["HUNTER"] = {tonumber(db.oUF.Colors.Class.Hunter.r), tonumber(db.oUF.Colors.Class.Hunter.g), tonumber(db.oUF.Colors.Class.Hunter.b)},
["MAGE"] = {tonumber(db.oUF.Colors.Class.Mage.r), tonumber(db.oUF.Colors.Class.Mage.g), tonumber(db.oUF.Colors.Class.Mage.b)},
["PALADIN"] = {tonumber(db.oUF.Colors.Class.Paladin.r), tonumber(db.oUF.Colors.Class.Paladin.g), tonumber(db.oUF.Colors.Class.Paladin.b)},
["SHAMAN"] = {tonumber(db.oUF.Colors.Class.Shaman.r), tonumber(db.oUF.Colors.Class.Shaman.g), tonumber(db.oUF.Colors.Class.Shaman.b)},
["WARLOCK"] = {tonumber(db.oUF.Colors.Class.Warlock.r), tonumber(db.oUF.Colors.Class.Warlock.g), tonumber(db.oUF.Colors.Class.Warlock.b)},
["ROGUE"] = {tonumber(db.oUF.Colors.Class.Rogue.r), tonumber(db.oUF.Colors.Class.Rogue.g), tonumber(db.oUF.Colors.Class.Rogue.b)},
["DEATHKNIGHT"] = {tonumber(db.oUF.Colors.Class.DeathKnight.r), tonumber(db.oUF.Colors.Class.DeathKnight.g), tonumber(db.oUF.Colors.Class.DeathKnight.b)},
}, {__index = oUF.colors.class}),
happiness = setmetatable({
[1] = {tonumber(db.oUF.Colors.Happiness.Happiness1.r), tonumber(db.oUF.Colors.Happiness.Happiness1.g), tonumber(db.oUF.Colors.Happiness.Happiness1.b)},
[2] = {tonumber(db.oUF.Colors.Happiness.Happiness2.r), tonumber(db.oUF.Colors.Happiness.Happiness2.g), tonumber(db.oUF.Colors.Happiness.Happiness2.b)},
[3] = {tonumber(db.oUF.Colors.Happiness.Happiness3.r), tonumber(db.oUF.Colors.Happiness.Happiness3.g), tonumber(db.oUF.Colors.Happiness.Happiness3.b)},
}, {__index = oUF.colors.happiness}),
runes = setmetatable({
[1] = {tonumber(db.oUF.Colors.Runes.Rune1.r), tonumber(db.oUF.Colors.Runes.Rune1.g), tonumber(db.oUF.Colors.Runes.Rune1.b)},
[2] = {tonumber(db.oUF.Colors.Runes.Rune2.r), tonumber(db.oUF.Colors.Runes.Rune2.g), tonumber(db.oUF.Colors.Runes.Rune2.b)},
[3] = {tonumber(db.oUF.Colors.Runes.Rune3.r), tonumber(db.oUF.Colors.Runes.Rune3.g), tonumber(db.oUF.Colors.Runes.Rune3.b)},
[4] = {tonumber(db.oUF.Colors.Runes.Rune4.r), tonumber(db.oUF.Colors.Runes.Rune4.g), tonumber(db.oUF.Colors.Runes.Rune4.b)},
}, {__index = oUF.colors.runes}),
totembar = setmetatable({
[1] = {tonumber(db.oUF.Colors.Totems.Fire.r), tonumber(db.oUF.Colors.Totems.Fire.g), tonumber(db.oUF.Colors.Totems.Fire.b)},
[2] = {tonumber(db.oUF.Colors.Totems.Earth.r), tonumber(db.oUF.Colors.Totems.Earth.g), tonumber(db.oUF.Colors.Totems.Earth.b)},
[3] = {tonumber(db.oUF.Colors.Totems.Water.r), tonumber(db.oUF.Colors.Totems.Water.g), tonumber(db.oUF.Colors.Totems.Water.b)},
[4] = {tonumber(db.oUF.Colors.Totems.Air.r), tonumber(db.oUF.Colors.Totems.Air.g), tonumber(db.oUF.Colors.Totems.Air.b)},
}, {__index = oUF.colors.totembar}),
}, {__index = oUF.colors})
At some point I will go back through and change the colors to be unpackable instead of having separate r, g, and b values