forked from zorkqz/ReturnBuffTracker
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathReturnBuffTracker.lua
More file actions
131 lines (104 loc) · 3.59 KB
/
ReturnBuffTracker.lua
File metadata and controls
131 lines (104 loc) · 3.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
local ReturnBuffTracker = LibStub("AceAddon-3.0"):NewAddon("ReturnBuffTracker", "AceConsole-3.0")
local defaults = {
profile = {
position = nil,
width = 180,
hideNotInRaid = true,
deactivatedBars = { }
}
}
function ReturnBuffTracker:OnInitialize()
ReturnBuffTracker.OptionBarNames = {}
for i, v in pairs(ReturnBuffTracker.Constants.BarOptionGroups) do
ReturnBuffTracker.OptionBarNames[i] = {}
end
for k, buff in pairs(ReturnBuffTracker.Buffs) do
if (buff.buffOptionsGroup) then
ReturnBuffTracker.OptionBarNames[buff.buffOptionsGroup][buff.optionText or buff.text or buff.name] = buff.optionText or buff.text or buff.name;
else
end
end
ReturnBuffTracker.db = LibStub("AceDB-3.0"):New("ReturnBuffTrackerDB", defaults, true)
ReturnBuffTracker:SetupOptions()
ReturnBuffTracker:CreateMainFrame()
local buffbars = {}
for k, group in pairs(ReturnBuffTracker.Constants.BarOptionGroups) do
buffbars[group] = {}
end
for k, buff in ipairs(ReturnBuffTracker.Buffs) do
tinsert(buffbars[buff.buffOptionsGroup], buff)
buff.bar = ReturnBuffTracker:CreateInfoBar(buff.text or buff.shortName, buff.color.r, buff.color.g, buff.color.b)
end
ReturnBuffTracker:UpdateBars()
ReturnBuffTracker.nextBuff = 1
ReturnBuffTracker.nextTime = 0
ReturnBuffTracker.updateFrame = CreateFrame("Frame")
ReturnBuffTracker.updateFrame:SetScript("OnUpdate", ReturnBuffTracker.OnUpdate)
end
function ReturnBuffTracker:UpdateBars()
local idx = 0
for k, buff in ipairs(ReturnBuffTracker.Buffs) do
if ReturnBuffTracker.db.profile.deactivatedBars[buff.optionText or buff.text or buff.name] then
buff.bar:SetIndex(nil)
else
buff.bar:SetIndex(idx)
idx = idx + 1
end
end
ReturnBuffTracker:SetHeightForBars(idx)
end
function ReturnBuffTracker:OnUpdate()
local currentTime = GetTime()
if currentTime < ReturnBuffTracker.nextTime then
return
end
ReturnBuffTracker.nextTime = currentTime + 0.1
if not ReturnBuffTracker:CheckHideIfNotInRaid() then
return
end
buff = ReturnBuffTracker.Buffs[ReturnBuffTracker.nextBuff]
ReturnBuffTracker.nextBuff = ReturnBuffTracker.nextBuff + 1
if ReturnBuffTracker.nextBuff > table.getn(ReturnBuffTracker.Buffs) then
ReturnBuffTracker.nextBuff = 1
end
if ReturnBuffTracker.db.profile.deactivatedBars[buff.optionText or buff.text or buff.name] then
return
end
value = 0
maxValue = 1
tooltip = nil
if buff.func then
value, maxValue = ReturnBuffTracker[buff.func](ReturnBuffTracker, buff)
else
value, maxValue, tooltip = ReturnBuffTracker:CheckBuff(buff)
end
if value and maxValue and maxValue > 0 then
buff.bar:Update(value, maxValue, tooltip)
else
buff.bar:Update(0, 1, nil)
end
end
function ReturnBuffTracker:Contains(tab, val)
if not tab then
return true
end
for key, value in pairs(tab) do
if value == val then
return true
end
end
return false
end
function ReturnBuffTracker:CheckHideIfNotInRaid()
if not ReturnBuffTracker.db.profile.hideNotInRaid or IsInRaid() then
if not ReturnBuffTracker.mainFrame:IsVisible() then
ReturnBuffTracker.mainFrame:Show()
end
return true
else
if ReturnBuffTracker.mainFrame:IsVisible() then
ReturnBuffTracker.mainFrame:Hide()
end
return false
end
end