diff --git a/2/3/4/5/6/7/ElvUI/Core/Cooldowns.lua b/2/3/4/5/6/7/ElvUI/Core/Cooldowns.lua
new file mode 100644
index 0000000..f6cc0b4
--- /dev/null
+++ b/2/3/4/5/6/7/ElvUI/Core/Cooldowns.lua
@@ -0,0 +1,138 @@
+local E, L, V, P, G = unpack(ElvUI); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
+
+local floor = math.floor
+local format = string.format
+local GetTime = GetTime
+
+local CreateFrame = CreateFrame
+local hooksecurefunc = hooksecurefunc
+
+local ICON_SIZE = 36 --the normal size for an icon (don't change this)
+local FONT_SIZE = 20 --the base font size to use at a scale of 1
+local MIN_SCALE = 0.5 --the minimum scale we want to show cooldown counts at, anything below this will be hidden
+local MIN_DURATION = 1.5 --the minimum duration to show cooldown text for
+
+local TimeColors = {
+ [0] = "|cfffefefe",
+ [1] = "|cfffefefe",
+ [2] = "|cfffefefe",
+ [3] = "|cfffefefe",
+ [4] = "|cfffe0000"
+}
+
+local function Cooldown_OnUpdate(cd, elapsed)
+ if cd.nextUpdate > 0 then
+ cd.nextUpdate = cd.nextUpdate - elapsed
+ return
+ end
+
+ local remain = cd.duration - (GetTime() - cd.start)
+ if remain > 0.05 then
+ if (cd.fontScale * cd:GetEffectiveScale() / UIParent:GetScale()) < MIN_SCALE then
+ cd.text:SetText("")
+ cd.nextUpdate = 500
+ else
+ local timervalue, formatid
+ timervalue, formatid, cd.nextUpdate = E:GetTimeInfo(remain, E.db.cooldown.threshold)
+ cd.text:SetText(format("%s%s|r", TimeColors[formatid], format(E.TimeFormats[formatid][2], timervalue)))
+ end
+ else
+ E:Cooldown_StopTimer(cd)
+ end
+end
+
+function E:Cooldown_OnSizeChanged(cd, width)
+ local fontScale = floor(width +.5) / ICON_SIZE
+ local override = cd:GetParent():GetParent().SizeOverride
+ if override then
+ fontScale = override / FONT_SIZE
+ end
+
+ if fontScale == cd.fontScale then
+ return
+ end
+
+ cd.fontScale = fontScale
+ if fontScale < MIN_SCALE and not override then
+ cd:Hide()
+ else
+ cd:Show()
+ E:FontTemplate(cd.text, nil, fontScale * FONT_SIZE, "OUTLINE")
+ if cd.enabled then
+ self:Cooldown_ForceUpdate(cd)
+ end
+ end
+end
+
+function E:Cooldown_ForceUpdate(cd)
+ cd.nextUpdate = 0
+ cd:Show()
+end
+
+function E:Cooldown_StopTimer(cd)
+ cd.enabled = nil
+ cd:Hide()
+end
+
+function E:CreateCooldownTimer(parent)
+ local scaler = CreateFrame("Frame", nil, parent)
+ scaler:SetAllPoints()
+
+ local timer = CreateFrame("Frame", nil, scaler)
+ timer:Hide()
+ timer:SetAllPoints()
+ timer:SetScript("OnUpdate", function() Cooldown_OnUpdate(this, arg1) end)
+
+ local text = timer:CreateFontString(nil, "OVERLAY")
+ text:SetPoint("CENTER", 1, 1)
+ text:SetJustifyH("CENTER")
+ timer.text = text
+
+ self:Cooldown_OnSizeChanged(timer, parent:GetWidth(), parent:GetHeight())
+ parent:SetScript("OnSizeChanged", function() self:Cooldown_OnSizeChanged(timer, parent:GetWidth(), parent:GetHeight()) end)
+
+ parent.timer = timer
+ return timer
+end
+
+function E:OnSetCooldown(start, duration, enable)
+ if self.noOCC then return end
+
+ if start > 0 and duration > MIN_DURATION and enable > 0 then
+ local timer = self.timer or E:CreateCooldownTimer(self)
+ timer.start = start
+ timer.duration = duration
+ timer.enabled = true
+ timer.nextUpdate = 0
+ if timer.fontScale >= MIN_SCALE then timer:Show() end
+ else
+ local timer = self.timer
+ if timer then
+ E:Cooldown_StopTimer(timer)
+ return
+ end
+ end
+end
+
+function E:RegisterCooldown(cooldown)
+ if not E.private.cooldown.enable or cooldown.isHooked then return end
+ hooksecurefunc("CooldownFrame_SetTimer", E.OnSetCooldown)
+ cooldown.isHooked = true
+end
+
+function E:UpdateCooldownSettings()
+ local color = self.db.cooldown.expiringColor
+ TimeColors[4] = E:RGBToHex(color.r, color.g, color.b) -- color for timers that are soon to expire
+
+ color = self.db.cooldown.secondsColor
+ TimeColors[3] = E:RGBToHex(color.r, color.g, color.b) -- color for timers that have seconds remaining
+
+ color = self.db.cooldown.minutesColor
+ TimeColors[2] = E:RGBToHex(color.r, color.g, color.b) -- color for timers that have minutes remaining
+
+ color = self.db.cooldown.hoursColor
+ TimeColors[1] = E:RGBToHex(color.r, color.g, color.b) -- color for timers that have hours remaining
+
+ color = self.db.cooldown.daysColor
+ TimeColors[0] = E:RGBToHex(color.r, color.g, color.b) -- color for timers that have days remaining
+end
\ No newline at end of file
diff --git a/2/3/4/5/6/7/ElvUI/Core/Load_Core.xml b/2/3/4/5/6/7/ElvUI/Core/Load_Core.xml
index 77919ae..9a1c2a8 100644
--- a/2/3/4/5/6/7/ElvUI/Core/Load_Core.xml
+++ b/2/3/4/5/6/7/ElvUI/Core/Load_Core.xml
@@ -12,7 +12,7 @@
-
+
\ No newline at end of file