Go to most recent revision | Details | Compare with Previous | View Log
Line No. | Rev | Author | Line |
---|---|---|---|
1 | 2 | Blooblahguy-207965 | --[[ Element: Auras |
2 | Blooblahguy-207965 | ||
3 | Blooblahguy-207965 | Handles creation and updating of aura icons. |
|
4 | Blooblahguy-207965 | ||
5 | Blooblahguy-207965 | Widget |
|
6 | Blooblahguy-207965 | ||
7 | Blooblahguy-207965 | Auras - A Frame to hold icons representing both buffs and debuffs. |
|
8 | Blooblahguy-207965 | Buffs - A Frame to hold icons representing buffs. |
|
9 | Blooblahguy-207965 | Debuffs - A Frame to hold icons representing debuffs. |
|
10 | Blooblahguy-207965 | ||
11 | Blooblahguy-207965 | Options |
|
12 | Blooblahguy-207965 | ||
13 | Blooblahguy-207965 | .disableCooldown - Disables the cooldown spiral. Defaults to false. |
|
14 | Blooblahguy-207965 | .size - Aura icon size. Defaults to 16. |
|
15 | Blooblahguy-207965 | .onlyShowPlayer - Only show auras created by player/vehicle. |
|
16 | Blooblahguy-207965 | .showStealableBuffs - Display the stealable texture on buffs that can be |
|
17 | Blooblahguy-207965 | stolen. |
|
18 | Blooblahguy-207965 | .spacing - Spacing between each icon. Defaults to 0. |
|
19 | Blooblahguy-207965 | .['spacing-x'] - Horizontal spacing between each icon. Takes priority over |
|
20 | Blooblahguy-207965 | `spacing`. |
|
21 | Blooblahguy-207965 | .['spacing-y'] - Vertical spacing between each icon. Takes priority over |
|
22 | Blooblahguy-207965 | `spacing`. |
|
23 | Blooblahguy-207965 | .['growth-x'] - Horizontal growth direction. Defaults to RIGHT. |
|
24 | Blooblahguy-207965 | .['growth-y'] - Vertical growth direction. Defaults to UP. |
|
25 | Blooblahguy-207965 | .initialAnchor - Anchor point for the icons. Defaults to BOTTOMLEFT. |
|
26 | Blooblahguy-207965 | .filter - Custom filter list for auras to display. Defaults to |
|
27 | Blooblahguy-207965 | HELPFUL on buffs and HARMFUL on debuffs. |
|
28 | Blooblahguy-207965 | ||
29 | Blooblahguy-207965 | Options Auras |
|
30 | Blooblahguy-207965 | ||
31 | Blooblahguy-207965 | .numBuffs - The maximum number of buffs to display. Defaults to 32. |
|
32 | Blooblahguy-207965 | .numDebuffs - The maximum number of debuffs to display. Defaults to 40. |
|
33 | Blooblahguy-207965 | .gap - Controls the creation of an invisible icon between buffs and |
|
34 | Blooblahguy-207965 | debuffs. Defaults to false. |
|
35 | Blooblahguy-207965 | .buffFilter - Custom filter list for buffs to display. Takes priority over |
|
36 | Blooblahguy-207965 | `filter`. |
|
37 | Blooblahguy-207965 | .debuffFilter - Custom filter list for debuffs to display. Takes priority over |
|
38 | Blooblahguy-207965 | `filter`. |
|
39 | Blooblahguy-207965 | ||
40 | Blooblahguy-207965 | Options Buffs |
|
41 | Blooblahguy-207965 | ||
42 | Blooblahguy-207965 | .num - Number of buffs to display. Defaults to 32. |
|
43 | Blooblahguy-207965 | ||
44 | Blooblahguy-207965 | Options Debuffs |
|
45 | Blooblahguy-207965 | ||
46 | Blooblahguy-207965 | .num - Number of debuffs to display. Defaults to 40. |
|
47 | Blooblahguy-207965 | ||
48 | Blooblahguy-207965 | Examples |
|
49 | Blooblahguy-207965 | ||
50 | Blooblahguy-207965 | -- Position and size |
|
51 | Blooblahguy-207965 | local Buffs = CreateFrame("Frame", nil, self) |
|
52 | Blooblahguy-207965 | Buffs:SetPoint("RIGHT", self, "LEFT") |
|
53 | Blooblahguy-207965 | Buffs:SetSize(16 * 2, 16 * 16) |
|
54 | Blooblahguy-207965 | ||
55 | Blooblahguy-207965 | -- Register with oUF |
|
56 | Blooblahguy-207965 | self.Buffs = Buffs |
|
57 | Blooblahguy-207965 | ||
58 | Blooblahguy-207965 | Hooks and Callbacks |
|
59 | Blooblahguy-207965 | ||
60 | Blooblahguy-207965 | ]] |
|
61 | Blooblahguy-207965 | ||
62 | Blooblahguy-207965 | local parent, ns = ... |
|
63 | Blooblahguy-207965 | local oUF = ns.oUF |
|
64 | Blooblahguy-207965 | ||
65 | Blooblahguy-207965 | local VISIBLE = 1 |
|
66 | Blooblahguy-207965 | local HIDDEN = 0 |
|
67 | Blooblahguy-207965 | ||
68 | Blooblahguy-207965 | local UpdateTooltip = function(self) |
|
69 | Blooblahguy-207965 | GameTooltip:SetUnitAura(self:GetParent().__owner.unit, self:GetID(), self.filter) |
|
70 | Blooblahguy-207965 | end |
|
71 | Blooblahguy-207965 | ||
72 | Blooblahguy-207965 | local OnEnter = function(self) |
|
73 | Blooblahguy-207965 | if(not self:IsVisible()) then return end |
|
74 | Blooblahguy-207965 | ||
75 | Blooblahguy-207965 | GameTooltip:SetOwner(self, "ANCHOR_BOTTOMRIGHT") |
|
76 | Blooblahguy-207965 | self:UpdateTooltip() |
|
77 | Blooblahguy-207965 | end |
|
78 | Blooblahguy-207965 | ||
79 | Blooblahguy-207965 | local OnLeave = function() |
|
80 | Blooblahguy-207965 | GameTooltip:Hide() |
|
81 | Blooblahguy-207965 | end |
|
82 | Blooblahguy-207965 | ||
83 | Blooblahguy-207965 | local createAuraIcon = function(icons, index) |
|
84 | Blooblahguy-207965 | icons.createdIcons = icons.createdIcons + 1 |
|
85 | Blooblahguy-207965 | ||
86 | Blooblahguy-207965 | local button = CreateFrame("Button", nil, icons) |
|
87 | Blooblahguy-207965 | button:RegisterForClicks'RightButtonUp' |
|
88 | Blooblahguy-207965 | ||
89 | Blooblahguy-207965 | local cd = CreateFrame("Cooldown", nil, button, "CooldownFrameTemplate") |
|
90 | Blooblahguy-207965 | cd:SetAllPoints(button) |
|
91 | Blooblahguy-207965 | ||
92 | Blooblahguy-207965 | local icon = button:CreateTexture(nil, "BORDER") |
|
93 | Blooblahguy-207965 | icon:SetAllPoints(button) |
|
94 | Blooblahguy-207965 | ||
95 | Blooblahguy-207965 | local count = button:CreateFontString(nil, "OVERLAY") |
|
96 | Blooblahguy-207965 | count:SetFontObject(NumberFontNormal) |
|
97 | Blooblahguy-207965 | count:SetPoint("BOTTOMRIGHT", button, "BOTTOMRIGHT", -1, 0) |
|
98 | Blooblahguy-207965 | ||
99 | Blooblahguy-207965 | local overlay = button:CreateTexture(nil, "OVERLAY") |
|
100 | Blooblahguy-207965 | overlay:SetTexture"Interface\\Buttons\\UI-Debuff-Overlays" |
|
101 | Blooblahguy-207965 | overlay:SetAllPoints(button) |
|
102 | Blooblahguy-207965 | overlay:SetTexCoord(.296875, .5703125, 0, .515625) |
|
103 | Blooblahguy-207965 | button.overlay = overlay |
|
104 | Blooblahguy-207965 | ||
105 | Blooblahguy-207965 | local stealable = button:CreateTexture(nil, 'OVERLAY') |
|
106 | Blooblahguy-207965 | stealable:SetTexture[[Interface\TargetingFrame\UI-TargetingFrame-Stealable]] |
|
107 | Blooblahguy-207965 | stealable:SetPoint('TOPLEFT', -3, 3) |
|
108 | Blooblahguy-207965 | stealable:SetPoint('BOTTOMRIGHT', 3, -3) |
|
109 | Blooblahguy-207965 | stealable:SetBlendMode'ADD' |
|
110 | Blooblahguy-207965 | button.stealable = stealable |
|
111 | Blooblahguy-207965 | ||
112 | Blooblahguy-207965 | button.UpdateTooltip = UpdateTooltip |
|
113 | Blooblahguy-207965 | button:SetScript("OnEnter", OnEnter) |
|
114 | Blooblahguy-207965 | button:SetScript("OnLeave", OnLeave) |
|
115 | Blooblahguy-207965 | ||
116 | Blooblahguy-207965 | table.insert(icons, button) |
|
117 | Blooblahguy-207965 | ||
118 | Blooblahguy-207965 | button.icon = icon |
|
119 | Blooblahguy-207965 | button.count = count |
|
120 | Blooblahguy-207965 | button.cd = cd |
|
121 | Blooblahguy-207965 | ||
122 | Blooblahguy-207965 | --[[ :PostCreateIcon(button) |
|
123 | Blooblahguy-207965 | ||
124 | Blooblahguy-207965 | Callback which is called after a new aura icon button has been created. |
|
125 | Blooblahguy-207965 | ||
126 | Blooblahguy-207965 | Arguments |
|
127 | Blooblahguy-207965 | ||
128 | Blooblahguy-207965 | button - The newly created aura icon button. |
|
129 | Blooblahguy-207965 | ]] |
|
130 | Blooblahguy-207965 | if(icons.PostCreateIcon) then icons:PostCreateIcon(button) end |
|
131 | Blooblahguy-207965 | ||
132 | Blooblahguy-207965 | return button |
|
133 | Blooblahguy-207965 | end |
|
134 | Blooblahguy-207965 | ||
135 | Blooblahguy-207965 | local customFilter = function(icons, unit, icon, name, rank, texture, count, dtype, duration, timeLeft, caster) |
|
136 | Blooblahguy-207965 | if((icons.onlyShowPlayer and icon.isPlayer) or (not icons.onlyShowPlayer and name)) then |
|
137 | Blooblahguy-207965 | return true |
|
138 | Blooblahguy-207965 | end |
|
139 | Blooblahguy-207965 | end |
|
140 | Blooblahguy-207965 | ||
141 | Blooblahguy-207965 | local updateIcon = function(unit, icons, index, offset, filter, isDebuff, visible) |
|
142 | Blooblahguy-207965 | local name, rank, texture, count, dtype, duration, timeLeft, caster, isStealable, shouldConsolidate, spellID, canApplyAura, isBossDebuff = UnitAura(unit, index, filter) |
|
143 | Blooblahguy-207965 | if(name) then |
|
144 | Blooblahguy-207965 | local n = visible + offset + 1 |
|
145 | Blooblahguy-207965 | local icon = icons[n] |
|
146 | Blooblahguy-207965 | if(not icon) then |
|
147 | Blooblahguy-207965 | --[[ :CreateIcon(index) |
|
148 | Blooblahguy-207965 | ||
149 | Blooblahguy-207965 | A function which creates the aura icon for a given index. |
|
150 | Blooblahguy-207965 | ||
151 | Blooblahguy-207965 | Arguments |
|
152 | Blooblahguy-207965 | ||
153 | Blooblahguy-207965 | index - The offset the icon should be created at. |
|
154 | Blooblahguy-207965 | ||
155 | Blooblahguy-207965 | Returns |
|
156 | Blooblahguy-207965 | ||
157 | Blooblahguy-207965 | A button used to represent aura icons. |
|
158 | Blooblahguy-207965 | ]] |
|
159 | Blooblahguy-207965 | icon = (icons.CreateIcon or createAuraIcon) (icons, n) |
|
160 | Blooblahguy-207965 | end |
|
161 | Blooblahguy-207965 | ||
162 | Blooblahguy-207965 | local isPlayer |
|
163 | Blooblahguy-207965 | if(caster == 'player' or caster == 'vehicle') then |
|
164 | Blooblahguy-207965 | isPlayer = true |
|
165 | Blooblahguy-207965 | end |
|
166 | Blooblahguy-207965 | ||
167 | Blooblahguy-207965 | icon.owner = caster |
|
168 | Blooblahguy-207965 | icon.filter = filter |
|
169 | Blooblahguy-207965 | icon.isDebuff = isDebuff |
|
170 | Blooblahguy-207965 | icon.isPlayer = isPlayer |
|
171 | Blooblahguy-207965 | ||
172 | Blooblahguy-207965 | ||
173 | Blooblahguy-207965 | --[[ :CustomFilter(unit, icon, ...) |
|
174 | Blooblahguy-207965 | ||
175 | Blooblahguy-207965 | Defines a custom filter which controls if the aura icon should be shown |
|
176 | Blooblahguy-207965 | or not. |
|
177 | Blooblahguy-207965 | ||
178 | Blooblahguy-207965 | Arguments |
|
179 | Blooblahguy-207965 | ||
180 | Blooblahguy-207965 | self - The widget that holds the aura icon. |
|
181 | Blooblahguy-207965 | unit - The unit that has the aura. |
|
182 | Blooblahguy-207965 | icon - The button displaying the aura. |
|
183 | Blooblahguy-207965 | ... - The return values from |
|
184 | Blooblahguy-207965 | [UnitAura](http://wowprogramming.com/docs/api/UnitAura). |
|
185 | Blooblahguy-207965 | ||
186 | Blooblahguy-207965 | Returns |
|
187 | Blooblahguy-207965 | ||
188 | Blooblahguy-207965 | A boolean value telling the aura element if it should be show the icon |
|
189 | Blooblahguy-207965 | or not. |
|
190 | Blooblahguy-207965 | ]] |
|
191 | Blooblahguy-207965 | local show = (icons.CustomFilter or customFilter) (icons, unit, icon, name, rank, texture, count, dtype, duration, timeLeft, caster, isStealable, shouldConsolidate, spellID, canApplyAura, isBossDebuff) |
|
192 | Blooblahguy-207965 | if(show) then |
|
193 | Blooblahguy-207965 | -- We might want to consider delaying the creation of an actual cooldown |
|
194 | Blooblahguy-207965 | -- object to this point, but I think that will just make things needlessly |
|
195 | Blooblahguy-207965 | -- complicated. |
|
196 | Blooblahguy-207965 | local cd = icon.cd |
|
197 | Blooblahguy-207965 | if(cd and not icons.disableCooldown) then |
|
198 | Blooblahguy-207965 | if(duration and duration > 0) then |
|
199 | Blooblahguy-207965 | cd:SetCooldown(timeLeft - duration, duration) |
|
200 | Blooblahguy-207965 | cd:Show() |
|
201 | Blooblahguy-207965 | else |
|
202 | Blooblahguy-207965 | cd:Hide() |
|
203 | Blooblahguy-207965 | end |
|
204 | Blooblahguy-207965 | end |
|
205 | Blooblahguy-207965 | ||
206 | Blooblahguy-207965 | if((isDebuff and icons.showDebuffType) or (not isDebuff and icons.showBuffType) or icons.showType) then |
|
207 | Blooblahguy-207965 | local color = DebuffTypeColor[dtype] or DebuffTypeColor.none |
|
208 | Blooblahguy-207965 | ||
209 | Blooblahguy-207965 | icon.overlay:SetVertexColor(color.r, color.g, color.b) |
|
210 | Blooblahguy-207965 | icon.overlay:Show() |
|
211 | Blooblahguy-207965 | else |
|
212 | Blooblahguy-207965 | icon.overlay:Hide() |
|
213 | Blooblahguy-207965 | end |
|
214 | Blooblahguy-207965 | ||
215 | Blooblahguy-207965 | local stealable = not isDebuff and isStealable |
|
216 | Blooblahguy-207965 | if(stealable and icons.showStealableBuffs and not UnitIsUnit('player', unit)) then |
|
217 | Blooblahguy-207965 | icon.stealable:Show() |
|
218 | Blooblahguy-207965 | else |
|
219 | Blooblahguy-207965 | icon.stealable:Hide() |
|
220 | Blooblahguy-207965 | end |
|
221 | Blooblahguy-207965 | ||
222 | Blooblahguy-207965 | icon.icon:SetTexture(texture) |
|
223 | Blooblahguy-207965 | icon.count:SetText((count > 1 and count)) |
|
224 | Blooblahguy-207965 | ||
225 | Blooblahguy-207965 | local size = icons.size or 16 |
|
226 | Blooblahguy-207965 | icon:SetSize(size, size) |
|
227 | Blooblahguy-207965 | ||
228 | Blooblahguy-207965 | icon:EnableMouse(true) |
|
229 | Blooblahguy-207965 | icon:SetID(index) |
|
230 | Blooblahguy-207965 | icon:Show() |
|
231 | Blooblahguy-207965 | ||
232 | Blooblahguy-207965 | --[[ :PostUpdateIcon(unit, icon, index, offest) |
|
233 | Blooblahguy-207965 | ||
234 | Blooblahguy-207965 | Callback which is called after the aura icon was updated. |
|
235 | Blooblahguy-207965 | ||
236 | Blooblahguy-207965 | Arguments |
|
237 | Blooblahguy-207965 | ||
238 | Blooblahguy-207965 | self - The widget that holds the aura icon. |
|
239 | Blooblahguy-207965 | unit - The unit that has the aura. |
|
240 | Blooblahguy-207965 | icon - The button that was updated. |
|
241 | Blooblahguy-207965 | index - The index of the aura. |
|
242 | Blooblahguy-207965 | offset - The offset the button was created at. |
|
243 | Blooblahguy-207965 | ]] |
|
244 | Blooblahguy-207965 | if(icons.PostUpdateIcon) then |
|
245 | Blooblahguy-207965 | icons:PostUpdateIcon(unit, icon, index, n) |
|
246 | Blooblahguy-207965 | end |
|
247 | Blooblahguy-207965 | ||
248 | Blooblahguy-207965 | return VISIBLE |
|
249 | Blooblahguy-207965 | else |
|
250 | Blooblahguy-207965 | return HIDDEN |
|
251 | Blooblahguy-207965 | end |
|
252 | Blooblahguy-207965 | end |
|
253 | Blooblahguy-207965 | end |
|
254 | Blooblahguy-207965 | ||
255 | Blooblahguy-207965 | --[[ :SetPosition(from, to) |
|
256 | Blooblahguy-207965 | ||
257 | Blooblahguy-207965 | Function used to (re-)anchor aura icons. This function is only called when |
|
258 | Blooblahguy-207965 | new aura icons have been created or if :PreSetPosition is defined. |
|
259 | Blooblahguy-207965 | ||
260 | Blooblahguy-207965 | Arguments |
|
261 | Blooblahguy-207965 | ||
262 | Blooblahguy-207965 | self - The widget that holds the aura icons. |
|
263 | Blooblahguy-207965 | from - The aura icon before the new aura icon. |
|
264 | Blooblahguy-207965 | to - The current number of created icons. |
|
265 | Blooblahguy-207965 | ]] |
|
266 | Blooblahguy-207965 | local SetPosition = function(icons, from, to) |
|
267 | Blooblahguy-207965 | local sizex = (icons.size or 16) + (icons['spacing-x'] or icons.spacing or 0) |
|
268 | Blooblahguy-207965 | local sizey = (icons.size or 16) + (icons['spacing-y'] or icons.spacing or 0) |
|
269 | Blooblahguy-207965 | local anchor = icons.initialAnchor or "BOTTOMLEFT" |
|
270 | Blooblahguy-207965 | local growthx = (icons["growth-x"] == "LEFT" and -1) or 1 |
|
271 | Blooblahguy-207965 | local growthy = (icons["growth-y"] == "DOWN" and -1) or 1 |
|
272 | Blooblahguy-207965 | local cols = math.floor(icons:GetWidth() / sizex + .5) |
|
273 | Blooblahguy-207965 | ||
274 | Blooblahguy-207965 | for i = from, to do |
|
275 | Blooblahguy-207965 | local button = icons[i] |
|
276 | Blooblahguy-207965 | ||
277 | Blooblahguy-207965 | -- Bail out if the to range is out of scope. |
|
278 | Blooblahguy-207965 | if(not button) then break end |
|
279 | Blooblahguy-207965 | local col = (i - 1) % cols |
|
280 | Blooblahguy-207965 | local row = math.floor((i - 1) / cols) |
|
281 | Blooblahguy-207965 | ||
282 | Blooblahguy-207965 | button:ClearAllPoints() |
|
283 | Blooblahguy-207965 | button:SetPoint(anchor, icons, anchor, col * sizex * growthx, row * sizey * growthy) |
|
284 | Blooblahguy-207965 | end |
|
285 | Blooblahguy-207965 | end |
|
286 | Blooblahguy-207965 | ||
287 | Blooblahguy-207965 | local filterIcons = function(unit, icons, filter, limit, isDebuff, offset, dontHide) |
|
288 | Blooblahguy-207965 | if(not offset) then offset = 0 end |
|
289 | Blooblahguy-207965 | local index = 1 |
|
290 | Blooblahguy-207965 | local visible = 0 |
|
291 | Blooblahguy-207965 | local hidden = 0 |
|
292 | Blooblahguy-207965 | while(visible < limit) do |
|
293 | Blooblahguy-207965 | local result = updateIcon(unit, icons, index, offset, filter, isDebuff, visible) |
|
294 | Blooblahguy-207965 | if(not result) then |
|
295 | Blooblahguy-207965 | break |
|
296 | Blooblahguy-207965 | elseif(result == VISIBLE) then |
|
297 | Blooblahguy-207965 | visible = visible + 1 |
|
298 | Blooblahguy-207965 | elseif(result == HIDDEN) then |
|
299 | Blooblahguy-207965 | hidden = hidden + 1 |
|
300 | Blooblahguy-207965 | end |
|
301 | Blooblahguy-207965 | ||
302 | Blooblahguy-207965 | index = index + 1 |
|
303 | Blooblahguy-207965 | end |
|
304 | Blooblahguy-207965 | ||
305 | Blooblahguy-207965 | if(not dontHide) then |
|
306 | Blooblahguy-207965 | for i = visible + offset + 1, #icons do |
|
307 | Blooblahguy-207965 | icons[i]:Hide() |
|
308 | Blooblahguy-207965 | end |
|
309 | Blooblahguy-207965 | end |
|
310 | Blooblahguy-207965 | ||
311 | Blooblahguy-207965 | return visible, hidden |
|
312 | Blooblahguy-207965 | end |
|
313 | Blooblahguy-207965 | ||
314 | Blooblahguy-207965 | local UpdateAuras = function(self, event, unit) |
|
315 | Blooblahguy-207965 | if(self.unit ~= unit) then return end |
|
316 | Blooblahguy-207965 | ||
317 | Blooblahguy-207965 | local auras = self.Auras |
|
318 | Blooblahguy-207965 | if(auras) then |
|
319 | Blooblahguy-207965 | if(auras.PreUpdate) then auras:PreUpdate(unit) end |
|
320 | Blooblahguy-207965 | ||
321 | Blooblahguy-207965 | local numBuffs = auras.numBuffs or 32 |
|
322 | Blooblahguy-207965 | local numDebuffs = auras.numDebuffs or 40 |
|
323 | Blooblahguy-207965 | local max = numBuffs + numDebuffs |
|
324 | Blooblahguy-207965 | ||
325 | Blooblahguy-207965 | local visibleBuffs, hiddenBuffs = filterIcons(unit, auras, auras.buffFilter or auras.filter or 'HELPFUL', numBuffs, nil, 0, true) |
|
326 | Blooblahguy-207965 | ||
327 | Blooblahguy-207965 | local hasGap |
|
328 | Blooblahguy-207965 | if(visibleBuffs ~= 0 and auras.gap) then |
|
329 | Blooblahguy-207965 | hasGap = true |
|
330 | Blooblahguy-207965 | visibleBuffs = visibleBuffs + 1 |
|
331 | Blooblahguy-207965 | ||
332 | Blooblahguy-207965 | local icon = auras[visibleBuffs] or (auras.CreateIcon or createAuraIcon) (auras, visibleBuffs) |
|
333 | Blooblahguy-207965 | ||
334 | Blooblahguy-207965 | -- Prevent the icon from displaying anything. |
|
335 | Blooblahguy-207965 | if(icon.cd) then icon.cd:Hide() end |
|
336 | Blooblahguy-207965 | icon:EnableMouse(false) |
|
337 | Blooblahguy-207965 | icon.icon:SetTexture() |
|
338 | Blooblahguy-207965 | icon.overlay:Hide() |
|
339 | Blooblahguy-207965 | icon.stealable:Hide() |
|
340 | Blooblahguy-207965 | icon.count:SetText() |
|
341 | Blooblahguy-207965 | icon:Show() |
|
342 | Blooblahguy-207965 | ||
343 | Blooblahguy-207965 | --[[ :PostUpdateGapIcon(unit, icon, visibleBuffs) |
|
344 | Blooblahguy-207965 | ||
345 | Blooblahguy-207965 | Callback which is called after an invisible aura icon has been |
|
346 | Blooblahguy-207965 | created. This is only used by Auras when the `gap` option is enabled. |
|
347 | Blooblahguy-207965 | ||
348 | Blooblahguy-207965 | Arguments |
|
349 | Blooblahguy-207965 | ||
350 | Blooblahguy-207965 | self - The widget that holds the aura icon. |
|
351 | Blooblahguy-207965 | unit - The unit that has the aura icon. |
|
352 | Blooblahguy-207965 | icon - The invisible aura icon / gap. |
|
353 | Blooblahguy-207965 | visibleBuffs - The number of currently visible buffs. |
|
354 | Blooblahguy-207965 | ]] |
|
355 | Blooblahguy-207965 | if(auras.PostUpdateGapIcon) then |
|
356 | Blooblahguy-207965 | auras:PostUpdateGapIcon(unit, icon, visibleBuffs) |
|
357 | Blooblahguy-207965 | end |
|
358 | Blooblahguy-207965 | end |
|
359 | Blooblahguy-207965 | ||
360 | Blooblahguy-207965 | local visibleDebuffs, hiddenDebuffs = filterIcons(unit, auras, auras.debuffFilter or auras.filter or 'HARMFUL', numDebuffs, true, visibleBuffs) |
|
361 | Blooblahguy-207965 | auras.visibleDebuffs = visibleDebuffs |
|
362 | Blooblahguy-207965 | ||
363 | Blooblahguy-207965 | if(hasGap and visibleDebuffs == 0) then |
|
364 | Blooblahguy-207965 | auras[visibleBuffs]:Hide() |
|
365 | Blooblahguy-207965 | visibleBuffs = visibleBuffs - 1 |
|
366 | Blooblahguy-207965 | end |
|
367 | Blooblahguy-207965 | ||
368 | Blooblahguy-207965 | auras.visibleBuffs = visibleBuffs |
|
369 | Blooblahguy-207965 | auras.visibleAuras = auras.visibleBuffs + auras.visibleDebuffs |
|
370 | Blooblahguy-207965 | ||
371 | Blooblahguy-207965 | local fromRange, toRange |
|
372 | Blooblahguy-207965 | if(auras.PreSetPosition) then |
|
373 | Blooblahguy-207965 | fromRange, toRange = auras:PreSetPosition(max) |
|
374 | Blooblahguy-207965 | end |
|
375 | Blooblahguy-207965 | ||
376 | Blooblahguy-207965 | if(fromRange or auras.createdIcons > auras.anchoredIcons) then |
|
377 | Blooblahguy-207965 | (auras.SetPosition or SetPosition) (auras, fromRange or auras.anchoredIcons + 1, toRange or auras.createdIcons) |
|
378 | Blooblahguy-207965 | auras.anchoredIcons = auras.createdIcons |
|
379 | Blooblahguy-207965 | end |
|
380 | Blooblahguy-207965 | ||
381 | Blooblahguy-207965 | if(auras.PostUpdate) then auras:PostUpdate(unit) end |
|
382 | Blooblahguy-207965 | end |
|
383 | Blooblahguy-207965 | ||
384 | Blooblahguy-207965 | local buffs = self.Buffs |
|
385 | Blooblahguy-207965 | if(buffs) then |
|
386 | Blooblahguy-207965 | if(buffs.PreUpdate) then buffs:PreUpdate(unit) end |
|
387 | Blooblahguy-207965 | ||
388 | Blooblahguy-207965 | local numBuffs = buffs.num or 32 |
|
389 | Blooblahguy-207965 | local visibleBuffs, hiddenBuffs = filterIcons(unit, buffs, buffs.filter or 'HELPFUL', numBuffs) |
|
390 | Blooblahguy-207965 | buffs.visibleBuffs = visibleBuffs |
|
391 | Blooblahguy-207965 | ||
392 | Blooblahguy-207965 | local fromRange, toRange |
|
393 | Blooblahguy-207965 | if(buffs.PreSetPosition) then |
|
394 | Blooblahguy-207965 | fromRange, toRange = buffs:PreSetPosition(numBuffs) |
|
395 | Blooblahguy-207965 | end |
|
396 | Blooblahguy-207965 | ||
397 | Blooblahguy-207965 | if(fromRange or buffs.createdIcons > buffs.anchoredIcons) then |
|
398 | Blooblahguy-207965 | (buffs.SetPosition or SetPosition) (buffs, fromRange or buffs.anchoredIcons + 1, toRange or buffs.createdIcons) |
|
399 | Blooblahguy-207965 | buffs.anchoredIcons = buffs.createdIcons |
|
400 | Blooblahguy-207965 | end |
|
401 | Blooblahguy-207965 | ||
402 | Blooblahguy-207965 | if(buffs.PostUpdate) then buffs:PostUpdate(unit) end |
|
403 | Blooblahguy-207965 | end |
|
404 | Blooblahguy-207965 | ||
405 | Blooblahguy-207965 | local debuffs = self.Debuffs |
|
406 | Blooblahguy-207965 | if(debuffs) then |
|
407 | Blooblahguy-207965 | if(debuffs.PreUpdate) then debuffs:PreUpdate(unit) end |
|
408 | Blooblahguy-207965 | ||
409 | Blooblahguy-207965 | local numDebuffs = debuffs.num or 40 |
|
410 | Blooblahguy-207965 | local visibleDebuffs, hiddenDebuffs = filterIcons(unit, debuffs, debuffs.filter or 'HARMFUL', numDebuffs, true) |
|
411 | Blooblahguy-207965 | debuffs.visibleDebuffs = visibleDebuffs |
|
412 | Blooblahguy-207965 | ||
413 | Blooblahguy-207965 | local fromRange, toRange |
|
414 | Blooblahguy-207965 | if(debuffs.PreSetPosition) then |
|
415 | Blooblahguy-207965 | fromRange, toRange = debuffs:PreSetPosition(numDebuffs) |
|
416 | Blooblahguy-207965 | end |
|
417 | Blooblahguy-207965 | ||
418 | Blooblahguy-207965 | if(fromRange or debuffs.createdIcons > debuffs.anchoredIcons) then |
|
419 | Blooblahguy-207965 | (debuffs.SetPosition or SetPosition) (debuffs, fromRange or debuffs.anchoredIcons + 1, toRange or debuffs.createdIcons) |
|
420 | Blooblahguy-207965 | debuffs.anchoredIcons = debuffs.createdIcons |
|
421 | Blooblahguy-207965 | end |
|
422 | Blooblahguy-207965 | ||
423 | Blooblahguy-207965 | if(debuffs.PostUpdate) then debuffs:PostUpdate(unit) end |
|
424 | Blooblahguy-207965 | end |
|
425 | Blooblahguy-207965 | end |
|
426 | Blooblahguy-207965 | ||
427 | Blooblahguy-207965 | local Update = function(self, event, unit) |
|
428 | Blooblahguy-207965 | if(self.unit ~= unit) then return end |
|
429 | Blooblahguy-207965 | ||
430 | Blooblahguy-207965 | UpdateAuras(self, event, unit) |
|
431 | Blooblahguy-207965 | ||
432 | Blooblahguy-207965 | -- Assume no event means someone wants to re-anchor things. This is usually |
|
433 | Blooblahguy-207965 | -- done by UpdateAllElements and :ForceUpdate. |
|
434 | Blooblahguy-207965 | if(event == 'ForceUpdate' or not event) then |
|
435 | Blooblahguy-207965 | local buffs = self.Buffs |
|
436 | Blooblahguy-207965 | if(buffs) then |
|
437 | Blooblahguy-207965 | (buffs.SetPosition or SetPosition) (buffs, 1, buffs.createdIcons) |
|
438 | Blooblahguy-207965 | end |
|
439 | Blooblahguy-207965 | ||
440 | Blooblahguy-207965 | local debuffs = self.Debuffs |
|
441 | Blooblahguy-207965 | if(debuffs) then |
|
442 | Blooblahguy-207965 | (debuffs.SetPosition or SetPosition) (debuffs, 1, debuffs.createdIcons) |
|
443 | Blooblahguy-207965 | end |
|
444 | Blooblahguy-207965 | ||
445 | Blooblahguy-207965 | local auras = self.Auras |
|
446 | Blooblahguy-207965 | if(auras) then |
|
447 | Blooblahguy-207965 | (auras.SetPosition or SetPosition) (auras, 1, auras.createdIcons) |
|
448 | Blooblahguy-207965 | end |
|
449 | Blooblahguy-207965 | end |
|
450 | Blooblahguy-207965 | end |
|
451 | Blooblahguy-207965 | ||
452 | Blooblahguy-207965 | local ForceUpdate = function(element) |
|
453 | Blooblahguy-207965 | return Update(element.__owner, 'ForceUpdate', element.__owner.unit) |
|
454 | Blooblahguy-207965 | end |
|
455 | Blooblahguy-207965 | ||
456 | Blooblahguy-207965 | local Enable = function(self) |
|
457 | Blooblahguy-207965 | if(self.Buffs or self.Debuffs or self.Auras) then |
|
458 | Blooblahguy-207965 | self:RegisterEvent("UNIT_AURA", UpdateAuras) |
|
459 | Blooblahguy-207965 | ||
460 | Blooblahguy-207965 | local buffs = self.Buffs |
|
461 | Blooblahguy-207965 | if(buffs) then |
|
462 | Blooblahguy-207965 | buffs.__owner = self |
|
463 | Blooblahguy-207965 | buffs.ForceUpdate = ForceUpdate |
|
464 | Blooblahguy-207965 | ||
465 | Blooblahguy-207965 | buffs.createdIcons = 0 |
|
466 | Blooblahguy-207965 | buffs.anchoredIcons = 0 |
|
467 | Blooblahguy-207965 | end |
|
468 | Blooblahguy-207965 | ||
469 | Blooblahguy-207965 | local debuffs = self.Debuffs |
|
470 | Blooblahguy-207965 | if(debuffs) then |
|
471 | Blooblahguy-207965 | debuffs.__owner = self |
|
472 | Blooblahguy-207965 | debuffs.ForceUpdate = ForceUpdate |
|
473 | Blooblahguy-207965 | ||
474 | Blooblahguy-207965 | debuffs.createdIcons = 0 |
|
475 | Blooblahguy-207965 | debuffs.anchoredIcons = 0 |
|
476 | Blooblahguy-207965 | end |
|
477 | Blooblahguy-207965 | ||
478 | Blooblahguy-207965 | local auras = self.Auras |
|
479 | Blooblahguy-207965 | if(auras) then |
|
480 | Blooblahguy-207965 | auras.__owner = self |
|
481 | Blooblahguy-207965 | auras.ForceUpdate = ForceUpdate |
|
482 | Blooblahguy-207965 | ||
483 | Blooblahguy-207965 | auras.createdIcons = 0 |
|
484 | Blooblahguy-207965 | auras.anchoredIcons = 0 |
|
485 | Blooblahguy-207965 | end |
|
486 | Blooblahguy-207965 | ||
487 | Blooblahguy-207965 | return true |
|
488 | Blooblahguy-207965 | end |
|
489 | Blooblahguy-207965 | end |
|
490 | Blooblahguy-207965 | ||
491 | Blooblahguy-207965 | local Disable = function(self) |
|
492 | Blooblahguy-207965 | if(self.Buffs or self.Debuffs or self.Auras) then |
|
493 | Blooblahguy-207965 | self:UnregisterEvent("UNIT_AURA", UpdateAuras) |
|
494 | Blooblahguy-207965 | end |
|
495 | Blooblahguy-207965 | end |
|
496 | Blooblahguy-207965 | ||
497 | Blooblahguy-207965 | oUF:AddElement('Aura', Update, Enable, Disable) |