Compare with Previous | Blame | View Log
local settings = oUF_Settings local font = settings.font local format = string.format local floor = math.floor local OmniCC_Settings = { FontSize = 13, -- Font size for frames of NormalizedSize, will be scaled for other sizes NormalizedSize = 31, -- At this frame width font will have 100% size ChangeColorTime = 5, -- Time in seconds when text color will be changed longR = 0.8, -- Color for cooldowns longer than ChangeColorTime. More info: http://www.wowwiki.com/API_FontString_SetTextColor longG = 0.8, longB = 0.8, shortR = 1, -- Color for cooldowns shorter than ChangeColorTime. shortG = 0.2, shortB = 0.2, Point = {"BOTTOM", 0, -2}, -- Where to place cooldown text. More info: http://www.wowwiki.com/API_Region_SetPoint } local function GetFormattedTime(s) if s >= 3600 then return format('%dh', floor(s/3600 + 0.5)), s % 3600 elseif s >= 60 then return format('%dm', floor(s/60 + 0.5)), s % 60 end return floor(s + 0.5), s - floor(s) end local function Timer_OnUpdate(self, elapsed) if self.text:IsShown() then if self.nextUpdate > 0 then self.nextUpdate = self.nextUpdate - elapsed else local remain = self.duration - (GetTime() - self.start) if floor(remain + 0.5) > 0 then local time, nextUpdate = GetFormattedTime(remain) self.text:SetText(time) self.nextUpdate = nextUpdate if(floor(remain + 0.5) > OmniCC_Settings.ChangeColorTime) then self.text:SetTextColor(OmniCC_Settings.longR, OmniCC_Settings.longG, OmniCC_Settings.longB) else self.text:SetTextColor(OmniCC_Settings.shortR, OmniCC_Settings.shortG, OmniCC_Settings.shortB) end else self.text:Hide() end end end end local function Timer_Create(self) if self:GetParent() then local realsize = self:GetParent():GetWidth() * OmniCC_Settings.FontSize / OmniCC_Settings.NormalizedSize if(realsize>8) then local text = self:CreateFontString(nil, "OVERLAY") text:SetPoint(unpack(OmniCC_Settings.Point)) text:SetJustifyH("CENTER") text:SetFont(font, realsize, "THINOUTLINE") self.text = text self:SetScript("OnUpdate", Timer_OnUpdate) return text end end end local function Timer_Start(self, start, duration) self.start = start self.duration = duration self.nextUpdate = 0 local text = self.text or Timer_Create(self) if text then text:Show() end end local methods = getmetatable(ActionButton1Cooldown).__index hooksecurefunc(methods, "SetCooldown", function(self, start, duration) if(start>0 and duration>3) then Timer_Start(self, start, duration) else local text = self.text if text then text:Hide() end end end)