Initial Commit

This commit is contained in:
andrew6180
2023-05-22 20:03:54 -07:00
parent 56cf11f138
commit a295c68dd4
115 changed files with 21743 additions and 2 deletions
+432
View File
@@ -0,0 +1,432 @@
--[[
-- Kui_Nameplates
-- By Kesava at curse.com
-- All rights reserved
-- Backported by: Kader at github.com/bkader
]]
local kui = LibStub("Kui-1.0")
local addon = LibStub("AceAddon-3.0"):GetAddon("KuiNameplates")
local mod = addon:NewModule("Castbar", addon.Prototype, "AceEvent-3.0")
local L = LibStub("AceLocale-3.0"):GetLocale("KuiNameplates")
mod.uiName = L["Cast bars"]
local format = format
local function ResetFade(f)
if not f or not f.castbar then
return
end
kui.frameFadeRemoveFrame(f.castbar)
f.castbar.shield:Hide()
f.castbar:Hide()
f.castbar:SetAlpha(1)
end
local sizes = {}
local function SetCVars()
-- force these to true as the module hides them anyway
SetCVar("showVKeyCastbar", 1)
end
------------------------------------------------------------- Script handlers --
local function OnDefaultCastbarShow(self)
if not mod.enabledState then
return
end
local f = self:GetParent().kui
ResetFade(f)
if mod:FrameIsIgnored(f) then
return
end
if f.castbar.name and f.castbar.spellName then
f.castbar.name:SetText(f.castbar.spellName)
end
-- is cast uninterruptible?
if f.shield:IsShown() then
f.castbar.bar:SetStatusBarColor(unpack(mod.db.profile.display.shieldbarcolour))
f.castbar.shield:Show()
else
f.castbar.bar:SetStatusBarColor(unpack(mod.db.profile.display.barcolour))
f.castbar.shield:Hide()
end
if f.trivial then
-- hide text & icon
if f.castbar.icon or f.castbar.curr then
f.castbar.curr:Hide()
end
else
if f.castbar.icon then
f.castbar.icon.tex:SetTexture(f.spell:GetTexture())
f.castbar.icon:Show()
end
if f.castbar.curr then
f.castbar.curr:Show()
end
end
-- castbar is shown on first update
end
local function OnDefaultCastbarHide(self)
local f = self:GetParent().kui
if f.castbar:IsShown() then
kui.frameFade(
f.castbar,
{
mode = "OUT",
timeToFade = .5,
startAlpha = 1,
endAlpha = 0,
finishedFunc = function()
ResetFade(f)
end
}
)
if f.castbar.name then
f.castbar.spellName = nil
f.castbar.name:SetText("")
end
if f.castbar.icon then
f.castbar.icon.tex:SetTexture(nil)
end
end
end
local function OnDefaultCastbarUpdate(self, elapsed)
if not mod.enabledState then
return
end
local f = self:GetParent().kui
if mod:FrameIsIgnored(f) then
return
end
local min, max = self:GetMinMaxValues()
if f.castbar.curr then
f.castbar.curr:SetText(format("%.1f", self:GetValue()))
end
if f.castbar.name and f.castbar.spellName then
f.castbar.name:SetText(f.castbar.spellName)
end
f.castbar.bar:SetMinMaxValues(min, max)
f.castbar.bar:SetValue(self:GetValue())
if f.shield:IsShown() then
f.castbar.bar:SetStatusBarColor(unpack(mod.db.profile.display.shieldbarcolour))
f.castbar.shield:Show()
else
f.castbar.bar:SetStatusBarColor(unpack(mod.db.profile.display.barcolour))
f.castbar.shield:Hide()
end
if f.trivial then
-- hide text & icon
if f.castbar.icon or f.castbar.curr then
f.castbar.curr:Hide()
end
else
if f.castbar.icon then
f.castbar.icon.tex:SetTexture(f.spell:GetTexture())
f.castbar.icon:Show()
end
if f.castbar.curr then
f.castbar.curr:Show()
end
end
f.castbar:Show()
end
local function OnDefaultCastbarEvent(self, event, unit, spellName, spellRank)
if event == "UNIT_SPELLCAST_START" or event == "UNIT_SPELLCAST_CHANNEL_START" then
local frame = addon:GetUnitPlate(unit)
if frame and frame.castbar then
frame.castbar.spellName = spellName
end
end
end
---------------------------------------------------------------------- create --
-- update castbar height and icon size
local function UpdateCastbar(frame)
if not frame.castbar then
return
end
if frame.castbar.bg then
frame.castbar.bg:SetHeight(sizes.cbheight)
end
if frame.castbar.icon then
frame.castbar.icon.bg:SetSize(sizes.icon, sizes.icon)
end
end
function mod:CreateCastbar(frame)
if frame.castbar then
return
end
-- container ---------------------------------------------------------------
frame.castbar = CreateFrame("Frame", nil, frame)
frame.castbar:SetFrameLevel(1)
frame.castbar:Hide()
-- background --------------------------------------------------------------
frame.castbar.bg = frame.castbar:CreateTexture(nil, "ARTWORK", nil, 1)
frame.castbar.bg:SetTexture(kui.m.t.solid)
frame.castbar.bg:SetVertexColor(0, 0, 0, 0.8)
frame.castbar.bg:SetPoint("TOPLEFT", frame.bg.fill, "BOTTOMLEFT", 0, -1)
frame.castbar.bg:SetPoint("TOPRIGHT", frame.bg.fill, "BOTTOMRIGHT", 0, 0)
-- cast bar ------------------------------------------------------------
frame.castbar.bar = CreateFrame("StatusBar", nil, frame.castbar)
frame.castbar.bar:SetStatusBarTexture(addon.bartexture)
frame.castbar.bar:GetStatusBarTexture():SetDrawLayer("ARTWORK", 2)
frame.castbar.bar:SetPoint("TOPLEFT", frame.castbar.bg, "TOPLEFT", 1, -1)
frame.castbar.bar:SetPoint("BOTTOMLEFT", frame.castbar.bg, "BOTTOMLEFT", 1, 1)
frame.castbar.bar:SetPoint("RIGHT", frame.castbar.bg, "RIGHT", -1, 0)
frame.castbar.bar:SetMinMaxValues(0, 1)
-- spark
frame.castbar.spark = frame.castbar.bar:CreateTexture(nil, "ARTWORK")
frame.castbar.spark:SetDrawLayer("ARTWORK", 6)
frame.castbar.spark:SetVertexColor(1, 1, 0.8)
frame.castbar.spark:SetTexture("Interface\\AddOns\\Kui_Nameplates\\Media\\t\\spark")
frame.castbar.spark:SetPoint("TOP", frame.castbar.bar:GetRegions(), "TOPRIGHT", 0, 3)
frame.castbar.spark:SetPoint("BOTTOM", frame.castbar.bar:GetRegions(), "BOTTOMRIGHT", 0, -3)
frame.castbar.spark:SetWidth(6)
-- uninterruptible cast shield -----------------------------------------
frame.castbar.shield = frame.castbar.bar:CreateTexture(nil, "ARTWORK")
frame.castbar.shield:SetTexture("Interface\\AddOns\\Kui_Nameplates\\Media\\Shield")
frame.castbar.shield:SetTexCoord(0, 0.84375, 0, 1)
frame.castbar.shield:SetVertexColor(0.5, 0.5, 0.7)
frame.castbar.shield:SetSize(sizes.shield * .84375, sizes.shield)
frame.castbar.shield:SetPoint("LEFT", frame.castbar.bg, -7, 0)
frame.castbar.shield:SetBlendMode("BLEND")
frame.castbar.shield:SetDrawLayer("ARTWORK", 7)
frame.castbar.shield:Hide()
-- cast bar text -------------------------------------------------------
if self.db.profile.display.spellname then
frame.castbar.name = frame:CreateFontString(frame.castbar.bar, {size = "small"})
frame.castbar.name:SetPoint("TOP", frame.castbar.bar, "BOTTOM", 0, -3)
end
if self.db.profile.display.casttime then
frame.castbar.curr = frame:CreateFontString(frame.castbar.bar, {size = "small"})
frame.castbar.curr:SetPoint("LEFT", frame.castbar.bg, "RIGHT", 2, 0)
end
if self.db.profile.display.spellicon then
frame.castbar.icon = CreateFrame("Frame", nil, frame.castbar)
frame.castbar.icon.bg = frame.castbar:CreateTexture(nil, "BACKGROUND")
frame.castbar.icon.bg:SetTexture(kui.m.t.solid)
frame.castbar.icon.bg:SetVertexColor(0, 0, 0, 0)
frame.castbar.icon.bg:SetPoint("TOPRIGHT", frame.health, "TOPLEFT", -2, 1)
frame.castbar.icon.tex = frame.castbar:CreateTexture(nil, "ARTWORK")
frame.castbar.icon.tex:SetPoint("TOPLEFT", frame.castbar.icon.bg, "TOPLEFT", 1, -1)
frame.castbar.icon.tex:SetPoint("BOTTOMRIGHT", frame.castbar.icon.bg, "BOTTOMRIGHT", -1, 1)
end
UpdateCastbar(frame)
-- scripts -------------------------------------------------------------
frame.oldCastbar:HookScript("OnShow", OnDefaultCastbarShow)
frame.oldCastbar:HookScript("OnHide", OnDefaultCastbarHide)
frame.oldCastbar:HookScript("OnUpdate", OnDefaultCastbarUpdate)
frame.castbar:RegisterEvent("UNIT_SPELLCAST_START")
frame.castbar:RegisterEvent("UNIT_SPELLCAST_CHANNEL_START")
frame.castbar:SetScript("OnEvent", OnDefaultCastbarEvent)
if frame.oldCastbar:IsVisible() then
OnDefaultCastbarShow(frame.oldCastbar)
end
end
------------------------------------------------------------------------ Hide --
function mod:HideCastbar(frame)
ResetFade(frame)
end
------------------------------------------------------------------- Functions --
function mod:FrameIsIgnored(frame)
return frame.castbar_ignore_frame or (frame.friend and not self.db.profile.onfriendly)
end
function mod:IgnoreFrame(frame)
frame.castbar_ignore_frame = (frame.castbar_ignore_frame and frame.castbar_ignore_frame + 1 or 1)
if frame.castbar and frame.castbar:IsShown() then
ResetFade(frame)
end
end
function mod:UnignoreFrame(frame)
frame.castbar_ignore_frame = (frame.castbar_ignore_frame and frame.castbar_ignore_frame - 1 or nil)
if frame.castbar_ignore_frame and frame.castbar_ignore_frame <= 0 then
frame.castbar_ignore_frame = nil
end
end
---------------------------------------------------- Post db change functions --
mod:AddConfigChanged(
"enabled",
function(v)
mod:Toggle(v)
end
)
mod:AddConfigChanged(
{"display", "shieldbarcolour"},
nil,
function(f, v)
f.castbar.shield:SetVertexColor(unpack(v))
end
)
mod:AddConfigChanged(
{"display", "cbheight"},
function()
sizes.cbheight = mod.db.profile.display.cbheight
sizes.icon = addon.db.profile.general.hheight + sizes.cbheight + 1
end,
UpdateCastbar
)
mod:AddGlobalConfigChanged("addon", {"general", "hheight"}, mod.configChangedFuncs.display.cbheight.ro, UpdateCastbar)
-------------------------------------------------------------------- Register --
function mod:GetOptions()
return {
enabled = {
type = "toggle",
name = L["Enable cast bar"],
desc = L["Show cast bars (at all)"],
order = 0,
disabled = false
},
onfriendly = {
type = "toggle",
name = L["Show friendly cast bars"],
desc = L["Show cast bars on friendly nameplates"],
order = 10,
disabled = function()
return not self.db.profile.enabled
end
},
display = {
type = "group",
name = L["Display"],
inline = true,
order = 20,
disabled = function()
return not self.db.profile.enabled
end,
args = {
casttime = {
type = "toggle",
name = L["Show cast time"],
desc = L["Show cast time and time remaining"],
order = 20
},
spellname = {
type = "toggle",
name = L["Show spell name"],
order = 15
},
spellicon = {
type = "toggle",
name = L["Show spell icon"],
order = 10
},
barcolour = {
type = "color",
name = L["Bar colour"],
desc = L["The colour of the cast bar during interruptible casts"],
order = 0
},
shieldbarcolour = {
type = "color",
name = L["Uninterruptible colour"],
desc = L["The colour of the cast bar and shield during UNinterruptible casts."],
order = 5
},
cbheight = {
type = "range",
name = L["Height"],
desc = L["The height of castbars on nameplates. Also affects the size of the spell icon."],
order = 25,
step = 1,
min = 3,
softMax = 20,
max = 100
}
}
}
}
end
function mod:OnInitialize()
self.db =
addon.db:RegisterNamespace(
self.moduleName,
{
profile = {
enabled = true,
onfriendly = true,
display = {
casttime = false,
spellname = true,
spellicon = true,
cbheight = 5,
barcolour = {.43, 0.47, 0.55, 1},
shieldbarcolour = {.8, 0.1, 0.1, 1}
}
}
}
)
addon:InitModuleOptions(self)
self:SetEnabledState(self.db.profile.enabled)
sizes = {cbheight = self.db.profile.display.cbheight, shield = 16}
self.configChangedFuncs.display.cbheight.ro(sizes.cbheight)
-- handle default interface cvars & checkboxes
InterfaceOptionsCombatPanel:HookScript(
"OnShow",
function()
InterfaceOptionsCombatPanelEnemyCastBarsOnNameplates:SetChecked(true)
InterfaceOptionsCombatPanelEnemyCastBarsOnNameplates:Disable()
end
)
InterfaceOptionsFrame:HookScript(
"OnHide",
function()
SetCVars()
end
)
SetCVars()
end
function mod:OnEnable()
for _, frame in pairs(addon.frameList) do
if not frame.kui or not frame.kui.castbar then
self:CreateCastbar(frame.kui)
end
end
end
function mod:OnDisable()
for _, frame in pairs(addon.frameList) do
self:HideCastbar(frame.kui)
end
end