Add files via upload
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
local T = ShaguTweaks.T
|
||||
|
||||
local module = ShaguTweaks:register({
|
||||
title = T["Improved Castbar"],
|
||||
description = T["Adds a spell icon and remaining cast time to the cast bar."],
|
||||
expansions = { ["vanilla"] = true },
|
||||
category = T["General"],
|
||||
enabled = nil,
|
||||
})
|
||||
|
||||
module.enable = function(self)
|
||||
local _G = ShaguTweaks.GetGlobalEnv()
|
||||
|
||||
local UnitCastingInfo = ShaguTweaks.UnitCastingInfo
|
||||
local UnitChannelInfo = ShaguTweaks.UnitChannelInfo
|
||||
|
||||
local castbar = CreateFrame("FRAME", "STImprovedCastbar", CastingBarFrame)
|
||||
castbar:Hide()
|
||||
|
||||
castbar.texture = CreateFrame("Frame", nil, castbar)
|
||||
castbar.texture:SetPoint("RIGHT", CastingBarFrame, "LEFT", -10, 2)
|
||||
castbar.texture:SetWidth(28)
|
||||
castbar.texture:SetHeight(28)
|
||||
|
||||
castbar.texture.icon = castbar.texture:CreateTexture(nil, "BACKGROUND")
|
||||
castbar.texture.icon:SetPoint("CENTER", 0, 0)
|
||||
castbar.texture.icon:SetWidth(24)
|
||||
castbar.texture.icon:SetHeight(24)
|
||||
castbar.texture:SetBackdrop({
|
||||
-- edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border",
|
||||
edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
|
||||
tile = true, tileSize = 8, edgeSize = 12,
|
||||
insets = { left = 2, right = 2, top = 2, bottom = 2 }
|
||||
})
|
||||
|
||||
if ShaguTweaks.DarkMode then
|
||||
castbar.texture:SetBackdropBorderColor( .3, .3, .3, .9)
|
||||
end
|
||||
|
||||
castbar.spellText = castbar:CreateFontString(nil, "HIGH", "GameFontWhite")
|
||||
castbar.spellText:SetPoint("CENTER", CastingBarFrame, "CENTER", 0, 3)
|
||||
local font, size, opts = castbar.spellText:GetFont()
|
||||
castbar.spellText:SetFont(font, size, "THINOUTLINE")
|
||||
|
||||
castbar.timerText = castbar:CreateFontString(nil, "HIGH", "GameFontWhite")
|
||||
castbar.timerText:SetPoint("RIGHT", CastingBarFrame, "RIGHT", -5, 3)
|
||||
castbar.timerText:SetFont(font, size, "THINOUTLINE")
|
||||
|
||||
CastingBarText:Hide()
|
||||
|
||||
local name = GetUnitName("player")
|
||||
|
||||
castbar:SetScript("OnUpdate", function()
|
||||
local cast, nameSubtext, text, texture, startTime, endTime, isTradeSkill = UnitCastingInfo("player")
|
||||
if not cast then
|
||||
-- scan for channel spells if no cast was found
|
||||
cast, nameSubtext, text, texture, startTime, endTime, isTradeSkill = UnitChannelInfo("player")
|
||||
end
|
||||
|
||||
local alpha = CastingBarFrame:GetAlpha()
|
||||
castbar:SetAlpha(alpha)
|
||||
|
||||
if cast then
|
||||
local channel = UnitChannelInfo(name)
|
||||
local duration = endTime - startTime
|
||||
local max = duration / 1000
|
||||
local cur = GetTime() - startTime / 1000
|
||||
|
||||
if channel then
|
||||
cur = max + startTime/1000 - GetTime()
|
||||
end
|
||||
|
||||
cur = cur > max and max or cur
|
||||
cur = cur < 0 and 0 or cur
|
||||
|
||||
local rem = max - cur
|
||||
rem = string.format("%.1f"..T["s"], rem)
|
||||
|
||||
castbar.spellText:SetText(cast)
|
||||
castbar.timerText:SetText(rem)
|
||||
|
||||
if texture then
|
||||
castbar.texture.icon:SetTexture(texture)
|
||||
castbar.texture.icon:Show()
|
||||
else
|
||||
castbar.texture.icon:Hide()
|
||||
end
|
||||
else
|
||||
if ( alpha == 0 ) then
|
||||
castbar:Hide()
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
local events = CreateFrame("Frame", nil, UIParent)
|
||||
events:RegisterEvent("SPELLCAST_START")
|
||||
events:RegisterEvent("SPELLCAST_CHANNEL_START")
|
||||
events:SetScript("OnEvent", function()
|
||||
castbar:Show()
|
||||
end)
|
||||
end
|
||||
Reference in New Issue
Block a user