This commit is contained in:
Bunny67
2017-12-14 00:19:24 +03:00
parent 203cea5a2e
commit 91a6bfcaa3
2 changed files with 139 additions and 1 deletions
+138
View File
@@ -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
+1 -1
View File
@@ -12,7 +12,7 @@
<Script file="tutorials.lua"/> <Script file="tutorials.lua"/>
<Script file="distributor.lua"/> <Script file="distributor.lua"/>
<Script file="dropdown.lua"/> <Script file="dropdown.lua"/>
<Script file="cooldowns.lua"/> <Script file="Cooldowns.lua"/>
<Script file="aprilfools.lua"/> <Script file="aprilfools.lua"/>
<Script file="pluginInstaller.lua"/> <Script file="pluginInstaller.lua"/>
</Ui> </Ui>