if select(2, UnitClass("player")) ~= "DEATHKNIGHT" then return end local parent, ns = ... local oUF = ns.oUF local floor = math.floor local runeColors = { {0.75, 0, 0}, -- blood {0, 0.75, 1}, -- frost {0.1, 0.75, 0}, -- unholy {0.75, 0, 1}, -- death } local runemap = { 1, 2, 5, 6, 3, 4 } local BLOOD_OF_THE_NORTH = 54637 local OnUpdate = function(self, elapsed) local duration = self.duration + elapsed if(duration >= self.max) then return self:SetScript("OnUpdate", nil) else self.duration = duration return self:SetValue(duration) end end local spellName = GetSpellInfo(54637) local UpdateType = function(self, event, rid) local spec = GetSpecialization() local isUsable = IsUsableSpell(spellName) local rune = self.Necromancy[rid] local colors = runeColors[spec] if (rune and colors) then local r, g, b = colors[1], colors[2], colors[3] rune.bar:SetStatusBarColor(r, g, b) if(rune.bar.Change) then rune.bar:Change(rid) end end end local UpdateRune = function(self, event, rid) local rune = self.Necromancy[rid] if(rune) then local start, duration, runeReady = GetRuneCooldown(rid) start = start or 0; duration = duration or 1; if(runeReady) then rune.bar:SetMinMaxValues(0, 1) rune.bar:SetValue(1) rune.bar:SetScript("OnUpdate", nil) else rune.bar.duration = GetTime() - start rune.bar.max = duration rune.bar:SetMinMaxValues(1, duration) rune.bar:SetScript("OnUpdate", OnUpdate) end end end local Update = function(self, event) for i=1, 6 do UpdateRune(self, event, i) end end local function UpdateAllRuneTypes(self) if(self) then for i=1, 6 do UpdateType(self, nil, i) end end end local ForceUpdate = function(element) return Update(element.__owner, 'ForceUpdate') end local Enable = function(self, unit) local runes = self.Necromancy if(runes and unit == 'player') then runes.__owner = self runes.ForceUpdate = ForceUpdate self:RegisterEvent("PLAYER_TALENT_UPDATE", UpdateAllRuneTypes) self:RegisterEvent("RUNE_POWER_UPDATE", UpdateRune, true) self:RegisterEvent("RUNE_TYPE_UPDATE", UpdateType, true) --I have no idea why this won't fire on initial login. self:RegisterEvent("PLAYER_ENTERING_WORLD", UpdateAllRuneTypes) if not runes.UpdateAllRuneTypes then runes.UpdateAllRuneTypes = UpdateAllRuneTypes end for i=1, 6 do UpdateType(self, nil, i) end RuneFrame.Show = RuneFrame.Hide RuneFrame:Hide() return true end end local Disable = function(self) RuneFrame.Show = nil RuneFrame:Show() local runes = self.Necromancy if(runes) then runes:SetScript('OnUpdate', nil) self:UnregisterEvent("PLAYER_TALENT_UPDATE", UpdateAllRuneTypes) self:UnregisterEvent("RUNE_POWER_UPDATE", UpdateRune) self:UnregisterEvent("RUNE_TYPE_UPDATE", UpdateType) self:UnregisterEvent("PLAYER_ENTERING_WORLD", UpdateAllRuneTypes) end end oUF:AddElement("Necromancy", Update, Enable, Disable)