203 lines
5.3 KiB
Lua
203 lines
5.3 KiB
Lua
--[[
|
|
-- Kui_Nameplates
|
|
-- By Kesava at curse.com
|
|
-- All rights reserved
|
|
-- Backported by: Kader at https://github.com/bkader
|
|
]]
|
|
local addon = LibStub("AceAddon-3.0"):GetAddon("KuiNameplates")
|
|
local mod = addon:NewModule("ComboPoints", addon.Prototype, "AceEvent-3.0")
|
|
local L = LibStub("AceLocale-3.0"):GetLocale("KuiNameplates")
|
|
local _
|
|
|
|
mod.uiName = L["Combo points"]
|
|
|
|
local ICON_SPACING = -1
|
|
|
|
local anticipationWasActive
|
|
|
|
local colours = {
|
|
full = {1, 1, .1},
|
|
partial = {.79, .55, .18},
|
|
anti = {1, .3, .3},
|
|
glowFull = {1, 1, .1, .6},
|
|
glowPartial = {0, 0, 0, .3},
|
|
glowAnti = {1, .1, .1, .8}
|
|
}
|
|
local sizes = {}
|
|
local defaultSizes = {}
|
|
|
|
local function ComboPointsUpdate(self)
|
|
if self.points and self.points > 0 then
|
|
if self.points == 5 then
|
|
self.colour = colours.full
|
|
self.glowColour = colours.glowFull
|
|
else
|
|
self.colour = colours.partial
|
|
self.glowColour = colours.glowPartial
|
|
end
|
|
|
|
for i = 1, 5 do
|
|
if i <= self.points then
|
|
self[i]:SetAlpha(1)
|
|
else
|
|
self[i]:SetAlpha(.3)
|
|
end
|
|
|
|
self[i]:SetVertexColor(unpack(self.colour))
|
|
self.glows[i]:SetVertexColor(unpack(self.glowColour))
|
|
end
|
|
|
|
self:Show()
|
|
elseif self:IsShown() then
|
|
self:Hide()
|
|
end
|
|
end
|
|
-------------------------------------------------------------- Event handlers --
|
|
function mod:UNIT_COMBO_POINTS(event, unit)
|
|
-- only works for player > target
|
|
if unit ~= "player" then
|
|
return
|
|
end
|
|
|
|
local f = addon:GetUnitPlate("target")
|
|
|
|
if f and f.combopoints then
|
|
local points = GetComboPoints("player", "target")
|
|
f.combopoints.points = points
|
|
f.combopoints:Update()
|
|
|
|
if points > 0 then
|
|
-- clear points on other frames
|
|
for _, frame in pairs(addon.frameList) do
|
|
if frame.kui.combopoints and frame.kui ~= f then
|
|
self:HideComboPoints(nil, frame.kui)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
---------------------------------------------------------------------- Target --
|
|
function mod:OnFrameTarget(msg, frame, is_target)
|
|
if is_target then
|
|
self:UNIT_COMBO_POINTS(nil, "player")
|
|
end
|
|
end
|
|
---------------------------------------------------------------------- Create --
|
|
function mod:CreateComboPoints(msg, frame)
|
|
-- create combo point icons
|
|
frame.combopoints = CreateFrame("Frame", nil, frame.overlay)
|
|
frame.combopoints.glows = {}
|
|
frame.combopoints:Hide()
|
|
|
|
local pcp
|
|
for i = 0, 4 do
|
|
-- create individual combo point icons
|
|
-- size and position of first icon is set in ScaleComboPoints
|
|
local cp = frame.combopoints:CreateTexture(nil, "ARTWORK")
|
|
cp:SetDrawLayer("ARTWORK", 2)
|
|
cp:SetTexture("Interface\\AddOns\\Kui_Nameplates\\Media\\combopoint-round")
|
|
|
|
if i > 0 then
|
|
cp:SetPoint("LEFT", pcp, "RIGHT", ICON_SPACING, 0)
|
|
end
|
|
|
|
tinsert(frame.combopoints, i + 1, cp)
|
|
pcp = cp
|
|
|
|
-- and their glows
|
|
local glow = frame.combopoints:CreateTexture(nil, "ARTWORK")
|
|
|
|
glow:SetDrawLayer("ARTWORK", 1)
|
|
glow:SetTexture("Interface\\AddOns\\Kui_Nameplates\\Media\\combopoint-glow")
|
|
glow:SetPoint("CENTER", cp)
|
|
|
|
tinsert(frame.combopoints.glows, i + 1, glow)
|
|
end
|
|
|
|
self:ScaleComboPoints(frame)
|
|
frame.combopoints.Update = ComboPointsUpdate
|
|
end
|
|
-- update/set frame sizes ------------------------------------------------------
|
|
function mod:ScaleComboPoints(frame)
|
|
for i, cp in ipairs(frame.combopoints) do
|
|
cp:SetSize(sizes.combopoints, sizes.combopoints)
|
|
|
|
if i == 1 then
|
|
-- place first icon to offset others to center
|
|
cp:SetPoint("BOTTOM", frame.overlay, "BOTTOM", -(sizes.combopoints + ICON_SPACING) * 2, -3)
|
|
end
|
|
|
|
frame.combopoints.glows[i]:SetSize(sizes.combopoints + 8, sizes.combopoints + 8)
|
|
end
|
|
end
|
|
------------------------------------------------------------------------ Hide --
|
|
function mod:HideComboPoints(msg, frame)
|
|
if frame.combopoints then
|
|
frame.combopoints.points = nil
|
|
frame.combopoints:Update()
|
|
end
|
|
end
|
|
---------------------------------------------------- Post db change functions --
|
|
mod:AddConfigChanged("enabled", function(v) mod:Toggle(v) end)
|
|
mod:AddConfigChanged(
|
|
"scale",
|
|
function(v)
|
|
sizes.combopoints = defaultSizes.combopoints * v
|
|
end,
|
|
function(f, v)
|
|
mod:ScaleComboPoints(f)
|
|
end
|
|
)
|
|
-------------------------------------------------------------------- Register --
|
|
function mod:GetOptions()
|
|
return {
|
|
enabled = {
|
|
type = "toggle",
|
|
name = L["Show combo points"],
|
|
desc = L["Show combo points on the target"],
|
|
order = 0
|
|
},
|
|
scale = {
|
|
type = "range",
|
|
name = L["Icon scale"],
|
|
desc = L["The scale of the combo point icons and glow"],
|
|
order = 5,
|
|
min = 0.1,
|
|
softMin = 0.5,
|
|
softMax = 2
|
|
}
|
|
}
|
|
end
|
|
|
|
function mod:OnInitialize()
|
|
self.db = addon.db:RegisterNamespace(self.moduleName, {profile = {enabled = true, scale = 1}})
|
|
defaultSizes.combopoints = 6.5
|
|
|
|
-- scale size with user option
|
|
self.configChangedFuncs.scale.ro(self.db.profile.scale)
|
|
|
|
addon:InitModuleOptions(self)
|
|
mod:SetEnabledState(self.db.profile.enabled)
|
|
end
|
|
|
|
function mod:OnEnable()
|
|
self:RegisterMessage("KuiNameplates_PostCreate", "CreateComboPoints")
|
|
self:RegisterMessage("KuiNameplates_PostHide", "HideComboPoints")
|
|
self:RegisterMessage("KuiNameplates_PostTarget", "OnFrameTarget")
|
|
|
|
self:RegisterEvent("UNIT_COMBO_POINTS")
|
|
|
|
for _, frame in pairs(addon.frameList) do
|
|
if not frame.combopoints then
|
|
self:CreateComboPoints(nil, frame.kui)
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:OnDisable()
|
|
self:UnregisterEvent("UNIT_COMBO_POINTS")
|
|
|
|
for _, frame in pairs(addon.frameList) do
|
|
self:HideComboPoints(nil, frame.kui)
|
|
end
|
|
end |