2021-05-19 16:35:26 +02:00
|
|
|
local select = select
|
|
|
|
local UnitExists, UnitAffectingCombat, GetSpellInfo = UnitExists, UnitAffectingCombat, GetSpellInfo
|
|
|
|
local CreateFrame = CreateFrame
|
|
|
|
|
|
|
|
local Gladdy = LibStub("Gladdy")
|
|
|
|
local L = Gladdy.L
|
|
|
|
|
2021-05-24 12:41:21 +02:00
|
|
|
local CombatIndicator = Gladdy:NewModule("Combat Indicator", nil, {
|
2021-05-19 16:35:26 +02:00
|
|
|
ciEnabled = true,
|
|
|
|
ciSize = 20,
|
|
|
|
ciAlpha = 1,
|
|
|
|
ciWidthFactor = 1,
|
|
|
|
ciXOffset = 0,
|
|
|
|
ciYOffset = -31,
|
|
|
|
ciBorderStyle = "Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp",
|
|
|
|
ciBorderColor = { r = 0, g = 0, b = 0, a = 1 },
|
2022-01-12 20:21:53 +01:00
|
|
|
ciFrameStrata = "HIGH",
|
|
|
|
ciFrameLevel = 5,
|
2021-05-19 16:35:26 +02:00
|
|
|
})
|
|
|
|
|
|
|
|
function CombatIndicator:Initialize()
|
|
|
|
self.frames = {}
|
2022-02-15 22:59:21 +01:00
|
|
|
if Gladdy.db.ciEnabled then
|
|
|
|
self:RegisterMessage("JOINED_ARENA")
|
|
|
|
end
|
2021-05-19 16:35:26 +02:00
|
|
|
self.updateInterval = 0.05
|
|
|
|
self.combatIndicatorIcon = select(3, GetSpellInfo(674))
|
|
|
|
end
|
|
|
|
|
|
|
|
function CombatIndicator:JOINED_ARENA()
|
|
|
|
self:SetScript("OnUpdate", CombatIndicator.OnEvent)
|
|
|
|
self.lastTimeUpdated = 0
|
|
|
|
end
|
|
|
|
|
|
|
|
function CombatIndicator:CreateFrame(unit)
|
|
|
|
local button = Gladdy.buttons[unit]
|
|
|
|
if not button then
|
|
|
|
return
|
|
|
|
end
|
|
|
|
local ciFrame = CreateFrame("Frame", "GladdyCombatindicator" .. unit, button)
|
|
|
|
ciFrame:EnableMouse(false)
|
2021-09-24 15:51:24 +02:00
|
|
|
ciFrame:SetMovable(true)
|
2022-01-12 20:21:53 +01:00
|
|
|
ciFrame:SetFrameStrata(Gladdy.db.ciFrameStrata)
|
|
|
|
ciFrame:SetFrameLevel(Gladdy.db.ciFrameLevel)
|
2021-05-19 16:35:26 +02:00
|
|
|
ciFrame:SetHeight(Gladdy.db.ciSize)
|
|
|
|
ciFrame:SetWidth(Gladdy.db.ciSize * Gladdy.db.ciWidthFactor)
|
|
|
|
|
|
|
|
ciFrame.texture = ciFrame:CreateTexture(nil, "OVERLAY")
|
|
|
|
ciFrame.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
|
|
|
ciFrame.texture:SetTexture(self.combatIndicatorIcon)
|
|
|
|
ciFrame.texture:SetAllPoints(ciFrame)
|
|
|
|
|
|
|
|
ciFrame.border = ciFrame:CreateTexture(nil, "OVERLAY")
|
|
|
|
ciFrame.border:SetAllPoints(ciFrame)
|
|
|
|
ciFrame.border:SetTexture(Gladdy.db.ciBorderStyle)
|
2022-01-12 23:07:23 +01:00
|
|
|
ciFrame.border:SetVertexColor(Gladdy:SetColor(Gladdy.db.ciBorderColor))
|
2021-05-19 16:35:26 +02:00
|
|
|
|
|
|
|
self.frames[unit] = ciFrame
|
|
|
|
button.ciFrame = ciFrame
|
|
|
|
end
|
|
|
|
|
2022-02-15 22:59:21 +01:00
|
|
|
function CombatIndicator:UpdateFrameOnce()
|
|
|
|
if Gladdy.db.ciEnabled then
|
|
|
|
self:RegisterMessage("JOINED_ARENA")
|
|
|
|
else
|
|
|
|
self:UnregisterAllMessages()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2021-05-19 16:35:26 +02:00
|
|
|
function CombatIndicator:UpdateFrame(unit)
|
|
|
|
local button = Gladdy.buttons[unit]
|
|
|
|
local ciFrame = self.frames[unit]
|
|
|
|
if (not button or not ciFrame) then
|
|
|
|
return
|
|
|
|
end
|
2022-01-12 20:21:53 +01:00
|
|
|
|
|
|
|
ciFrame:SetFrameStrata(Gladdy.db.ciFrameStrata)
|
|
|
|
ciFrame:SetFrameLevel(Gladdy.db.ciFrameLevel)
|
|
|
|
|
2021-05-19 16:35:26 +02:00
|
|
|
ciFrame:SetHeight(Gladdy.db.ciSize)
|
|
|
|
ciFrame:SetWidth(Gladdy.db.ciSize * Gladdy.db.ciWidthFactor)
|
2021-05-22 13:28:27 +02:00
|
|
|
ciFrame.border:SetTexture(Gladdy.db.ciBorderStyle)
|
2022-01-12 23:07:23 +01:00
|
|
|
ciFrame.border:SetVertexColor(Gladdy:SetColor(Gladdy.db.ciBorderColor))
|
2021-05-19 16:35:26 +02:00
|
|
|
|
2022-01-11 00:29:17 +01:00
|
|
|
Gladdy:SetPosition(ciFrame, unit, "ciXOffset", "ciYOffset", CombatIndicator:LegacySetPosition(ciFrame, unit), CombatIndicator)
|
2021-05-19 19:30:40 +02:00
|
|
|
|
2021-05-19 16:35:26 +02:00
|
|
|
ciFrame:SetAlpha(Gladdy.db.ciAlpha)
|
|
|
|
|
|
|
|
if (Gladdy.db.ciEnabled == false) then
|
|
|
|
ciFrame:Hide()
|
|
|
|
else
|
|
|
|
ciFrame:Show()
|
|
|
|
end
|
2021-09-24 15:51:24 +02:00
|
|
|
if (unit == "arena1") then
|
2022-01-13 23:11:33 +01:00
|
|
|
Gladdy:CreateMover(ciFrame, "ciXOffset", "ciYOffset", L["Combat Indicator"],
|
|
|
|
{"TOPLEFT", "TOPLEFT"},
|
|
|
|
Gladdy.db.ciSize * Gladdy.db.ciWidthFactor, Gladdy.db.ciSize,
|
|
|
|
0, 0, "ciEnabled")
|
2021-09-24 15:51:24 +02:00
|
|
|
end
|
2021-05-19 16:35:26 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
function CombatIndicator:Test()
|
|
|
|
self.test = true
|
|
|
|
self:JOINED_ARENA()
|
|
|
|
end
|
|
|
|
|
|
|
|
function CombatIndicator:Reset()
|
|
|
|
self:SetScript("OnUpdate", nil)
|
|
|
|
self.test = false
|
|
|
|
end
|
|
|
|
|
|
|
|
function CombatIndicator.OnEvent(self, elapsed)
|
|
|
|
self.lastTimeUpdated = self.lastTimeUpdated + elapsed
|
|
|
|
|
|
|
|
if (self.lastTimeUpdated > self.updateInterval) then
|
|
|
|
for i=1,Gladdy.curBracket do
|
|
|
|
local unit = "arena" .. i
|
2021-06-22 12:18:45 +02:00
|
|
|
if Gladdy.db.ciEnabled and (CombatIndicator.test or (UnitExists(unit) and UnitAffectingCombat(unit))) then
|
2021-05-19 16:35:26 +02:00
|
|
|
CombatIndicator.frames[unit]:Show()
|
|
|
|
else
|
|
|
|
CombatIndicator.frames[unit]:Hide()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
self.lastTimeUpdated = 0
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function CombatIndicator:GetOptions()
|
|
|
|
return {
|
2021-05-24 12:41:21 +02:00
|
|
|
header = {
|
2021-05-19 16:35:26 +02:00
|
|
|
type = "header",
|
2021-05-24 12:41:21 +02:00
|
|
|
name = L["Combat Indicator"],
|
2021-05-19 16:35:26 +02:00
|
|
|
order = 2,
|
|
|
|
},
|
|
|
|
ciEnabled = Gladdy:option({
|
|
|
|
type = "toggle",
|
|
|
|
name = L["Enabled"],
|
2021-05-24 12:41:21 +02:00
|
|
|
desc = L["Enable Combat Indicator icon"],
|
2021-05-19 16:35:26 +02:00
|
|
|
order = 3,
|
|
|
|
}),
|
|
|
|
group = {
|
|
|
|
type = "group",
|
|
|
|
childGroups = "tree",
|
2021-05-24 12:41:21 +02:00
|
|
|
name = L["Frame"],
|
2021-05-19 16:35:26 +02:00
|
|
|
order = 4,
|
2022-02-15 22:59:21 +01:00
|
|
|
disabled = function() return not Gladdy.db.ciEnabled end,
|
2021-05-19 16:35:26 +02:00
|
|
|
args = {
|
|
|
|
general = {
|
|
|
|
type = "group",
|
|
|
|
name = L["Frame"],
|
|
|
|
order = 1,
|
|
|
|
args = {
|
|
|
|
header = {
|
|
|
|
type = "header",
|
|
|
|
name = L["Frame"],
|
|
|
|
order = 1,
|
|
|
|
},
|
|
|
|
ciSize = Gladdy:option({
|
|
|
|
type = "range",
|
|
|
|
name = L["Icon size"],
|
|
|
|
min = 5,
|
|
|
|
max = 100,
|
|
|
|
step = 1,
|
|
|
|
order = 2,
|
2021-06-15 09:06:05 +02:00
|
|
|
width = "full",
|
2021-05-19 16:35:26 +02:00
|
|
|
}),
|
|
|
|
ciWidthFactor = Gladdy:option({
|
|
|
|
type = "range",
|
|
|
|
name = L["Icon width factor"],
|
|
|
|
min = 0.5,
|
|
|
|
max = 2,
|
|
|
|
step = 0.05,
|
|
|
|
order = 3,
|
2021-06-15 09:06:05 +02:00
|
|
|
width = "full",
|
2021-05-19 16:35:26 +02:00
|
|
|
}),
|
|
|
|
ciAlpha = Gladdy:option({
|
|
|
|
type = "range",
|
|
|
|
name = L["Alpha"],
|
|
|
|
min = 0,
|
|
|
|
max = 1,
|
|
|
|
step = 0.05,
|
|
|
|
order = 4,
|
2021-06-15 09:06:05 +02:00
|
|
|
width = "full",
|
2021-05-19 16:35:26 +02:00
|
|
|
}),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
position = {
|
|
|
|
type = "group",
|
|
|
|
name = L["Position"],
|
2022-01-12 20:21:53 +01:00
|
|
|
order = 3,
|
2021-05-19 16:35:26 +02:00
|
|
|
args = {
|
|
|
|
header = {
|
|
|
|
type = "header",
|
|
|
|
name = L["Position"],
|
|
|
|
order = 4,
|
|
|
|
},
|
|
|
|
ciXOffset = Gladdy:option({
|
|
|
|
type = "range",
|
|
|
|
name = L["Horizontal offset"],
|
|
|
|
order = 23,
|
|
|
|
min = -400,
|
|
|
|
max = 400,
|
|
|
|
step = 0.1,
|
2021-06-15 09:06:05 +02:00
|
|
|
width = "full",
|
2021-05-19 16:35:26 +02:00
|
|
|
}),
|
|
|
|
ciYOffset = Gladdy:option({
|
|
|
|
type = "range",
|
|
|
|
name = L["Vertical offset"],
|
|
|
|
order = 24,
|
|
|
|
min = -400,
|
|
|
|
max = 400,
|
|
|
|
step = 0.1,
|
2021-06-15 09:06:05 +02:00
|
|
|
width = "full",
|
2021-05-19 16:35:26 +02:00
|
|
|
}),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
border = {
|
|
|
|
type = "group",
|
|
|
|
name = L["Border"],
|
2022-01-12 20:21:53 +01:00
|
|
|
order = 2,
|
2021-05-19 16:35:26 +02:00
|
|
|
args = {
|
|
|
|
header = {
|
|
|
|
type = "header",
|
|
|
|
name = L["Border"],
|
|
|
|
order = 4,
|
|
|
|
},
|
|
|
|
ciBorderStyle = Gladdy:option({
|
|
|
|
type = "select",
|
|
|
|
name = L["Border style"],
|
|
|
|
order = 31,
|
|
|
|
values = Gladdy:GetIconStyles()
|
|
|
|
}),
|
|
|
|
ciBorderColor = Gladdy:colorOption({
|
|
|
|
type = "color",
|
|
|
|
name = L["Border color"],
|
|
|
|
desc = L["Color of the border"],
|
|
|
|
order = 32,
|
|
|
|
hasAlpha = true,
|
|
|
|
}),
|
|
|
|
},
|
|
|
|
},
|
2022-01-12 20:21:53 +01:00
|
|
|
frameStrata = {
|
|
|
|
type = "group",
|
|
|
|
name = L["Frame Strata and Level"],
|
|
|
|
order = 5,
|
|
|
|
args = {
|
|
|
|
headerAuraLevel = {
|
|
|
|
type = "header",
|
|
|
|
name = L["Frame Strata and Level"],
|
|
|
|
order = 1,
|
|
|
|
},
|
|
|
|
ciFrameStrata = Gladdy:option({
|
|
|
|
type = "select",
|
|
|
|
name = L["Frame Strata"],
|
|
|
|
order = 2,
|
|
|
|
values = Gladdy.frameStrata,
|
|
|
|
sorting = Gladdy.frameStrataSorting,
|
|
|
|
width = "full",
|
|
|
|
}),
|
|
|
|
ciFrameLevel = Gladdy:option({
|
|
|
|
type = "range",
|
|
|
|
name = L["Frame Level"],
|
|
|
|
min = 0,
|
|
|
|
max = 500,
|
|
|
|
step = 1,
|
|
|
|
order = 3,
|
|
|
|
width = "full",
|
|
|
|
}),
|
|
|
|
},
|
|
|
|
},
|
2021-05-19 16:35:26 +02:00
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
2022-01-11 00:29:17 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
---------------------------
|
|
|
|
|
|
|
|
-- LAGACY HANDLER
|
|
|
|
|
|
|
|
---------------------------
|
|
|
|
|
|
|
|
function CombatIndicator:LegacySetPosition(ciFrame, unit)
|
|
|
|
if Gladdy.db.newLayout then
|
|
|
|
return Gladdy.db.newLayout
|
|
|
|
end
|
|
|
|
-- LEGACY options
|
|
|
|
local ANCHORS = { ["LEFT"] = "RIGHT", ["RIGHT"] = "LEFT", ["BOTTOM"] = "TOP", ["TOP"] = "BOTTOM"}
|
|
|
|
local ciAnchor = Gladdy.db.ciAnchor or Gladdy.legacy.ciAnchor
|
|
|
|
local ciPos = Gladdy.db.ciPos
|
|
|
|
|
|
|
|
ciFrame:ClearAllPoints()
|
|
|
|
ciFrame:SetPoint(ANCHORS[ciPos], Gladdy.buttons[unit][ciAnchor], ciPos, Gladdy.db.ciXOffset, Gladdy.db.ciYOffset)
|
|
|
|
return Gladdy.db.newLayout
|
2021-05-19 16:35:26 +02:00
|
|
|
end
|