annotate BuffButton.lua @ 28:c33c17dd97e7

file renames
author Nenue
date Wed, 13 Apr 2016 20:19:37 -0400
parents 5301c68f28d8
children
rev   line source
Nenue@0 1 --- Actual BlizzUI modifications are applied here
Nenue@0 2 -- @file-author@
Nenue@0 3 -- @project-revision@ @project-hash@
Nenue@0 4 -- @file-revision@ @file-hash@
Nenue@0 5 -- Created: 3/12/2016 12:47 AM
Nenue@0 6 local MODULE = 'BuffFrame'
Nenue@0 7 local _, A = ...
Nenue@0 8 local B, _G = A.frame, _G
Nenue@0 9 local type, unpack, select, pairs, ipairs = _G.type, _G.unpack, _G.select, _G.pairs, _G.ipairs
Nenue@0 10 local min, ceil, mod, tonumber, tostring = _G.min, _G.ceil, _G.mod, _G.tonumber, _G.tostring
Nenue@0 11 local floor, wipe, max = _G.math.floor, _G.table.wipe, _G.math.max
Nenue@0 12 local CreateFrame, IsInGroup, GetCVarBool = _G.CreateFrame, _G.IsInGroup, _G.GetCVarBool
Nenue@0 13 local BuffFrame, ConsolidatedBuffs = _G.BuffFrame, _G.ConsolidatedBuffs
Nenue@0 14 local print, gprint, aprint, fprint = B.print('Buff'), B.print('SetGuides'), B.print('SetAnchors'), B.fprint
Nenue@0 15 local displays, anchors, guides, decors, positioned, drawn, zoom = B.displays, {}, {}, {}, {}, {}, {}
Nenue@0 16 local UnitAura, UnitName, RegisterStateDriver = _G.UnitAura, _G.UnitName, _G.RegisterStateDriver
Nenue@0 17
Nenue@0 18 local M = B:RegisterModule(MODULE)
Nenue@0 19
Nenue@0 20 M.GetBuffZoom = function(buffName)
Nenue@0 21 local zoom = tonumber(B.displays[buffName].conf['Zoom']) / 100 / 2
Nenue@0 22 local zoomL, zoomU, zoomR, zoomD = zoom, zoom, 1-zoom, 1-zoom
Nenue@0 23 print(buffName, zoom)
Nenue@0 24 return function(self, ...)
Nenue@0 25 if select('#',...) == 4 then
Nenue@0 26 zoomL, zoomR, zoomU, zoomD = ...
Nenue@0 27 end
Nenue@0 28 self:SetTexCoord(zoomL, zoomR, zoomU, zoomD)
Nenue@0 29 return zoomL, zoomR, zoomU, zoomD
Nenue@0 30 end
Nenue@0 31 end
Nenue@0 32
Nenue@0 33
Nenue@0 34
Nenue@0 35 M.UpdateButtonAlpha = function(self)
Nenue@0 36 if not self.parent.timeLeft or not self:IsVisible() then
Nenue@0 37 self:SetScript('OnUpdate', nil)
Nenue@0 38 return
Nenue@0 39 end
Nenue@0 40
Nenue@0 41 if self.parent.timeLeft < _G.BUFF_WARNING_TIME then
Nenue@0 42 self:SetAlpha(BuffFrame.BuffAlphaValue)
Nenue@0 43 else
Nenue@0 44 self:SetAlpha(1)
Nenue@0 45 end
Nenue@0 46 end
Nenue@0 47
Nenue@0 48 --- Called infrequently to align stencil frames
Nenue@0 49 local refreshCount = 0
Nenue@0 50 M.UpdateGuideFrames = function(buffName)
Nenue@0 51 refreshCount = refreshCount + 1
Nenue@0 52 local print = fprint()
Nenue@0 53
Nenue@0 54
Nenue@0 55 local anchor = anchors[buffName]
Nenue@0 56 local c, g, d = displays[buffName].conf, guides[buffName], decors[buffName]
Nenue@0 57 local perRow = c['PerRow']
Nenue@0 58 local buffSpacing, buffSize, buffBorder, buffDurationSize, buffCountSize, relativeX, relativeY = c['Spacing'], c['Size'], c['Border'], c['DurationSize'], c['CountSize'], c['RelativeX'], c['RelativeY']
Nenue@0 59 local consolidated = (anchors[buffName].contains and IsInGroup())
Nenue@0 60 local consolidatedPosition = (consolidated and anchors[buffName].containPosition or 0)
Nenue@0 61
Nenue@0 62
Nenue@0 63 print('|cFF00FF00Setting Guides ('..refreshCount..'):|r', buffName, 'user max:',c['Max'], 'hard max:', displays[buffName].maxIcons)
Nenue@0 64
Nenue@0 65 local buffMax = min(c['Max'], displays[buffName].maxIcons)
Nenue@0 66 local anchorFrom, anchorTo = c.Point[1], c.Point[2]
Nenue@0 67 anchor.Zoom = M.GetBuffZoom(buffName)
Nenue@0 68
Nenue@0 69
Nenue@0 70
Nenue@0 71 if consolidated then
Nenue@0 72 buffMax = buffMax + 1
Nenue@0 73 end
Nenue@0 74
Nenue@0 75 local legend = {}
Nenue@0 76 legend.r, legend.g, legend.b, legend.a = unpack(displays[buffName].legendColor)
Nenue@0 77 local horizFrom = (relativeX < 0) and 'RIGHT' or 'LEFT'
Nenue@0 78 local horizTo = (relativeX < 0) and 'LEFT' or 'RIGHT'
Nenue@0 79 local vertFrom = (relativeY < 0) and 'TOP' or 'BOTTOM'
Nenue@0 80 local vertTo = (relativeY < 0) and 'BOTTOM' or 'TOP'
Nenue@0 81 local previous, up
Nenue@0 82 local bottom_extent = 0
Nenue@0 83 for i = 1, buffMax do
Nenue@0 84 print('update idx', i)
Nenue@0 85 if not g[i] then
Nenue@0 86 g[i] = CreateFrame('Frame', buffName..'Guide'..i, anchor, displays[buffName].template or 'VeneerGuideTemplate')
Nenue@0 87 RegisterStateDriver(g[i], "visibility", "[petbattle] [vehicleui] hide; show")
Nenue@0 88 end
Nenue@0 89
Nenue@0 90 local guide = g[i]
Nenue@0 91
Nenue@0 92 local row = ceil(i / perRow)
Nenue@0 93 local col = mod(i, perRow)
Nenue@0 94 if col == 0 then
Nenue@0 95 col = perRow
Nenue@0 96 end
Nenue@0 97
Nenue@0 98 guide.previous = previous
Nenue@0 99 guide.up = up
Nenue@0 100 local x, y, parent = 0, 0, anchor
Nenue@0 101 if i == 1 then
Nenue@0 102 parent = anchor
Nenue@0 103 up = guide
Nenue@0 104 elseif col == 1 then
Nenue@0 105 parent = g[i-perRow]
Nenue@0 106 y = (buffSpacing + bottom_extent) * relativeY
Nenue@0 107 up = guide
Nenue@0 108 anchorFrom = vertFrom .. horizFrom
Nenue@0 109 anchorTo = vertFrom .. horizFrom
Nenue@0 110 bottom_extent = 0
Nenue@0 111 else
Nenue@0 112 parent = g[i-1]
Nenue@0 113 x = buffSpacing * relativeX
Nenue@0 114 anchorFrom = vertFrom .. horizFrom
Nenue@0 115 anchorTo = vertFrom .. horizTo
Nenue@0 116 end
Nenue@0 117 previous = guide
Nenue@0 118 guide.parent = parent
Nenue@0 119
Nenue@0 120 ---------------------------------
Nenue@0 121 -- Positioning layer
Nenue@0 122 if i ~= consolidatedPosition or not consolidated then
Nenue@0 123 guide:SetSize(buffSize, buffSize + buffDurationSize)
Nenue@0 124 -- RaidBuffTray will fix the sizing
Nenue@0 125 end
Nenue@0 126 bottom_extent = max(bottom_extent, guide:GetHeight())
Nenue@0 127
Nenue@0 128 guide.info = {} -- UnitAura cache
Nenue@0 129
Nenue@0 130 if i == consolidatedPosition then
Nenue@0 131 guide.legend:SetTexture(1,1,0,0.5)
Nenue@0 132 else
Nenue@0 133 guide.legend:SetTexture(legend.r, legend.g, legend.b, legend.a)
Nenue@0 134 end
Nenue@0 135
Nenue@0 136 guide.idText:SetText(i) -- needs to reflect the current position
Nenue@0 137
Nenue@0 138 guide:ClearAllPoints()
Nenue@0 139 guide:SetPoint(anchorFrom, parent, anchorTo, x, y)
Nenue@0 140 print(anchorFrom, parent, anchorTo, x, y)
Nenue@0 141
Nenue@0 142 guide.icon:SetSize(buffSize - buffBorder * 2, buffSize - buffBorder * 2)
Nenue@0 143 guide.icon:ClearAllPoints()
Nenue@0 144 guide.icon:SetPoint('TOPLEFT', guide, 'TOPLEFT', buffBorder, -buffBorder )
Nenue@0 145
Nenue@0 146 local anchorTo, anchorFrom, x, y = unpack(c.DurationPoint)
Nenue@0 147 guide.duration:ClearAllPoints()
Nenue@0 148 guide.duration:SetPoint(anchorTo, guide, anchorFrom, x, y)
Nenue@0 149 --guide.duration:SetSize(buffSize, buffDurationSize)
Nenue@0 150 print(' duration ->', anchorFrom, anchorTo, x, y)
Nenue@0 151
Nenue@0 152 local anchorTo, anchorFrom, x, y = unpack(c.CountPoint)
Nenue@0 153 guide.count:ClearAllPoints()
Nenue@0 154 guide.count:SetPoint(anchorTo, guide.icon, anchorFrom, x, y)
Nenue@0 155 --guide.count:SetSize(buffSize, c.CountSize)
Nenue@0 156 print(' count ->', anchorFrom, anchorTo, x, y)
Nenue@0 157
Nenue@0 158 -----------------------------------
Nenue@0 159 -- Background decorations layer
Nenue@0 160 if not d[i] then
Nenue@0 161 d[i] = CreateFrame('Frame', buffName..i..'Decor', _G.UIParent, 'VeneerDecorTemplate')
Nenue@7 162 -- todo: sort out a way to fix this without creating taint issues
Nenue@7 163 RegisterStateDriver(d[i], "visibility", "[petbattle] [vehicleui] hide")
Nenue@0 164 end
Nenue@0 165
Nenue@0 166 d[i]:SetPoint('BOTTOMLEFT', guide.icon, 'BOTTOMLEFT', -buffBorder, -buffBorder)
Nenue@0 167 d[i]:SetPoint('TOPRIGHT', guide.icon, 'TOPRIGHT', buffBorder, buffBorder)
Nenue@0 168
Nenue@0 169
Nenue@0 170 guide:Show()
Nenue@0 171 B.SetConfigLayers(guide)
Nenue@0 172 end
Nenue@0 173
Nenue@0 174
Nenue@0 175 if #guides[buffName] > buffMax then
Nenue@0 176 local lim = #guides[buffName]
Nenue@0 177 for i = buffMax+1, lim do
Nenue@0 178
Nenue@0 179 local g = guides[buffName][i]
Nenue@0 180 if g:IsVisible() then
Nenue@0 181 print('cleaning up #', i, buffName)
Nenue@0 182 g:Hide()
Nenue@0 183 B.RemoveConfigLayers(g)
Nenue@0 184 end
Nenue@0 185
Nenue@0 186 end
Nenue@0 187 end
Nenue@0 188
Nenue@0 189 anchor.last = previous
Nenue@0 190 anchor.up = up
Nenue@0 191
Nenue@0 192 print(anchor:GetName(), anchor:GetSize())
Nenue@0 193 end
Nenue@0 194
Nenue@0 195 M.UpdateButtonPositions = function(buffName, auraType)
Nenue@0 196 local print = fprint()
Nenue@0 197 local c = auraType.conf
Nenue@0 198 local numBuffs = 0
Nenue@0 199 local actualIcons = auraType.actualIcons()
Nenue@0 200 local maxIcons = auraType.maxIcons
Nenue@0 201 local anchor = anchors[buffName]
Nenue@0 202 local buffMax = c['Max']
Nenue@0 203 local consolidated = (anchor.contains and IsInGroup())
Nenue@0 204 local consolidatedPosition = (consolidated and anchor.containPosition or 0)
Nenue@0 205
Nenue@0 206 for k,v in pairs(decors[buffName]) do
Nenue@0 207 print(v)
Nenue@0 208 end
Nenue@0 209
Nenue@0 210 if consolidated then
Nenue@0 211 decors[buffName][1]:Hide()
Nenue@0 212 numBuffs = numBuffs + 1
Nenue@0 213 buffMax = buffMax + 1
Nenue@0 214 end
Nenue@0 215
Nenue@0 216 print(' ', 'frame count:', auraType.actualIcons(), 'hardmax:', maxIcons)
Nenue@0 217 if auraType.actualIcons() > 0 then
Nenue@0 218 for i = 1, actualIcons do
Nenue@0 219
Nenue@0 220
Nenue@0 221 local buff = _G[buffName .. i]
Nenue@0 222 local buffIcon = _G[buffName .. i .. 'Icon']
Nenue@0 223 local buffBorder = c['Border']
Nenue@0 224 local buffDuration = _G[buffName .. i .. 'Duration']
Nenue@0 225 local buffCount = _G[buffName .. i .. 'Count']
Nenue@0 226 local buffDurationSize = c['DurationSize']
Nenue@0 227 local debuffBorder = _G[buffName .. i .. 'Border']
Nenue@0 228
Nenue@0 229
Nenue@0 230 if buff and not buff.consolidated then
Nenue@0 231 numBuffs = numBuffs + 1
Nenue@0 232 local guide = guides[buffName][numBuffs]
Nenue@0 233 local deco = decors[buffName][numBuffs]
Nenue@0 234 if numBuffs > buffMax then
Nenue@0 235 -- if a limit is reached, start hiding
Nenue@0 236 if guide then
Nenue@0 237 guide.info = nil
Nenue@0 238 end
Nenue@0 239 if deco then
Nenue@0 240 deco:Hide()
Nenue@0 241 end
Nenue@0 242 buff:Hide()
Nenue@0 243 else
Nenue@0 244 local buffData = guide.info
Nenue@0 245 buffData.name, buffData.rank, buffData.icon, buffData.count, buffData.dispelType, buffData.duration, buffData.expires, buffData.caster, buffData.isStealable, buffData.shouldConsolidate, buffData.spellID, buffData.canApplyAura, buffData.isBossDebuff, buffData.value1, buffData.value2, buffData.value3
Nenue@0 246 = UnitAura(buff.unit, buff:GetID(), nil, buff.filters)
Nenue@0 247
Nenue@0 248 if guide.caster and buffData.caster then
Nenue@0 249 if (buffData.caster ~= 'player' or c.ShowSelfCast) then
Nenue@0 250 guide.caster:SetText(UnitName(buffData.caster))
Nenue@0 251 else
Nenue@0 252 guide.caster:SetText(nil)
Nenue@0 253 end
Nenue@0 254 end
Nenue@0 255
Nenue@0 256
Nenue@0 257 print(numBuffs, i, buff:GetName(), buff:GetID(), decors[buffName][numBuffs]:GetName())
Nenue@0 258
Nenue@0 259 buff:SetAllPoints(guide)
Nenue@0 260 buffIcon:ClearAllPoints()
Nenue@0 261 buffIcon:SetPoint('TOPLEFT', guide.icon, 'TOPLEFT', 0, 0)
Nenue@0 262 buffIcon:SetPoint('BOTTOMRIGHT', guide.icon, 'BOTTOMRIGHT', 0, 0)
Nenue@0 263
Nenue@0 264 deco.parent = buff
Nenue@0 265 -- make sure so they aren't re-shown in pet battle
Nenue@0 266 if not C_PetBattles.IsInBattle() then
Nenue@0 267 deco:Show()
Nenue@0 268 deco:SetAlpha(1)
Nenue@0 269 end
Nenue@0 270
Nenue@0 271 if debuffBorder then
Nenue@0 272 deco.background:SetTexture(debuffBorder:GetVertexColor())
Nenue@0 273 debuffBorder:Hide()
Nenue@0 274 else
Nenue@0 275 if guide.info.caster == 'player' then
Nenue@0 276 print(guide.info.caster)
Nenue@0 277 deco.background:SetTexture(unpack(c.PlayerColor))
Nenue@0 278 elseif buffData.isBossDebuff then
Nenue@0 279 print(guide.info.isBossDebuff)
Nenue@0 280 deco.background:SetTexture(unpack(c.BossColor))
Nenue@0 281 else
Nenue@0 282 print(guide.info.caster)
Nenue@0 283 deco.background:SetTexture(unpack(c.Color))
Nenue@0 284 end
Nenue@0 285 end
Nenue@0 286
Nenue@0 287
Nenue@0 288 buffDuration:ClearAllPoints()
Nenue@0 289 local from, to = unpack(c.DurationPoint)
Nenue@0 290 buffDuration:SetPoint(from, guide.duration, to)
Nenue@0 291 buffDuration:SetText('WHAT')
Nenue@0 292
Nenue@0 293 if buff.timeLeft and c.WarningFade then
Nenue@0 294 deco:SetScript('OnUpdate', M.UpdateButtonAlpha)
Nenue@0 295 else
Nenue@0 296 deco:SetScript('OnUpdate', nil)
Nenue@0 297 deco:SetAlpha(1.0)
Nenue@0 298 end
Nenue@0 299
Nenue@0 300 buffCount:ClearAllPoints()
Nenue@0 301 local from, to = unpack(c.CountPoint)
Nenue@0 302 buffCount:SetPoint(from, guide.count, to)
Nenue@0 303
Nenue@0 304 if not drawn[buffName][numBuffs] then
Nenue@0 305 anchors[buffName].Zoom(buffIcon)
Nenue@0 306
Nenue@0 307 if buffDuration then
Nenue@0 308 local font = buffDuration:GetFont()
Nenue@0 309 buffDuration:SetFont(font, c.DurationSize, 'OUTLINE')
Nenue@0 310
Nenue@0 311 end
Nenue@0 312
Nenue@0 313 if buffCount then
Nenue@0 314 local font = buffCount:GetFont()
Nenue@0 315 buffCount:SetFont(font, c.CountSize, 'OUTLINE')
Nenue@0 316 end
Nenue@0 317 drawn[buffName][numBuffs] = true
Nenue@0 318 end
Nenue@0 319 end
Nenue@0 320 end
Nenue@0 321
Nenue@0 322 end
Nenue@0 323 end
Nenue@0 324 -- clear any outliers
Nenue@0 325 for i = numBuffs+1, buffMax do
Nenue@0 326 if guides[buffName][i].caster then
Nenue@0 327 guides[buffName][i].caster:SetText(nil)
Nenue@0 328 end
Nenue@0 329 --if not decors[buffName][i].parent or
Nenue@0 330
Nenue@0 331 decors[buffName][i].parent = nil
Nenue@0 332 decors[buffName][i]:SetAlpha(1.0)
Nenue@0 333 decors[buffName][i]:SetScript('OnUpdate', nil)
Nenue@0 334 decors[buffName][i]:Hide()
Nenue@0 335 end
Nenue@0 336
Nenue@0 337 -- parametric occlusion data for compacted anchor points
Nenue@0 338 if numBuffs == 0 then
Nenue@0 339 anchor.cutout_X = 0
Nenue@0 340 anchor.cutout_Y = 0
Nenue@0 341 anchor.outer_X = 0
Nenue@0 342 anchor.outer_Y = 0
Nenue@0 343 elseif numBuffs <= buffMax then
Nenue@0 344 local sX, sY = guides[buffName][numBuffs]:GetWidth(), guides[buffName][numBuffs]:GetHeight()
Nenue@0 345 local p = c.PerRow
Nenue@0 346 local lX = mod(numBuffs, p)
Nenue@0 347 local lY = floor(numBuffs / p)
Nenue@0 348 local oX = min(numBuffs, c.PerRow)
Nenue@0 349 local oY = ceil(numBuffs / p)
Nenue@0 350 anchor.cutout_X = lX * sX + lX * c.Spacing -- max clearance to fit alongside the row
Nenue@0 351 anchor.cutout_Y = lY * sY + lY * c.Spacing
Nenue@0 352 anchor.outer_Y = oY * sY + oY * c.Spacing -- distance of farthest row
Nenue@0 353 anchor.outer_X = oX * sX + oX * c.Spacing
Nenue@0 354
Nenue@0 355
Nenue@0 356 print('|cFF0088FF', 'inner corner', lX, lY, 'outer corners', oX, oY)
Nenue@0 357 print('cutout delta =', anchor.cutout_X, anchor.cutout_Y, 'out of', floor(anchor:GetWidth()), floor(anchor:GetHeight()))
Nenue@0 358 print('extent delta =', anchor.outer_X, anchor.outer_Y)
Nenue@0 359 else
Nenue@0 360 anchor.cutout_X = 0
Nenue@0 361 anchor.cutout_Y = 0
Nenue@0 362 anchor.outer_X = 0
Nenue@0 363 anchor.outer_Y = 0
Nenue@0 364 end
Nenue@0 365
Nenue@0 366 if anchor.attached then
Nenue@0 367 M.UpdateAnchorChild(anchor, anchor.attached, anchor.attachmentConf)
Nenue@0 368 end
Nenue@0 369
Nenue@0 370 end
Nenue@0 371
Nenue@0 372 M.PostBuffAnchors = function()
Nenue@0 373 local print = fprint()
Nenue@0 374 if M.ShowConsolidatedBuffs then
Nenue@0 375 M.UpdateRaidBuffs()
Nenue@0 376 end
Nenue@0 377 for buttonName, auraType in pairs(displays) do
Nenue@0 378 print('sending', buttonName, auraType)
Nenue@0 379 -- if waiting for anchors
Nenue@0 380 if not anchors[buttonName] then
Nenue@0 381 return
Nenue@0 382 end
Nenue@0 383
Nenue@0 384 --if positioned[buttonName] == 0 then
Nenue@0 385 print('possibly reloaded UI, check positions')
Nenue@0 386 M.UpdateGuideFrames(buttonName)
Nenue@0 387 --end
Nenue@0 388
Nenue@0 389 M.UpdateButtonPositions(buttonName, auraType)
Nenue@0 390 end
Nenue@0 391 end
Nenue@0 392
Nenue@0 393 M.UpdateBuffs = function(buttonName, forced)
Nenue@0 394 local print = B.fprint(buttonName)
Nenue@0 395 local c = displays[buttonName].conf
Nenue@0 396 if drawn[buttonName] then
Nenue@0 397 wipe(drawn[buttonName])
Nenue@0 398 else
Nenue@0 399 drawn[buttonName] = {}
Nenue@0 400 end
Nenue@0 401
Nenue@0 402 M.UpdateAnchorFrames(buttonName)
Nenue@0 403 M.UpdateGuideFrames(buttonName)
Nenue@0 404 M.UpdateButtonPositions(buttonName, displays[buttonName])
Nenue@0 405 end
Nenue@0 406
Nenue@0 407 --- should only be called from user input
Nenue@0 408 print('init def')
Nenue@0 409 function M:OnInitialize ()
Nenue@0 410 drawn = B.Abstract(B.displays, 'drawn')
Nenue@0 411 -- Lesser extent of guide frames that have been positioned
Nenue@0 412 positioned = B.Abstract(B.displays, 'positioned', positioned)
Nenue@0 413 -- Backdrop style frame
Nenue@0 414 decors = B.Abstract(B.displays, 'decorator', decors)
Nenue@0 415 -- Static positioning frames
Nenue@0 416 guides = B.Abstract(B.displays, 'guides', guides)
Nenue@0 417 -- Anchor points for guides
Nenue@0 418 anchors = B.Abstract(B.displays, 'anchor')
Nenue@0 419 -- Stored functions for doing icon texture adjustments
Nenue@0 420 zoom = B.Abstract(B.displays, 'zoom', zoom)
Nenue@0 421
Nenue@0 422 B:RegisterUnitEvent("UNIT_AURA", "player", "vehicle")
Nenue@0 423 B:RegisterEvent("GROUP_ROSTER_UPDATE")
Nenue@0 424 B:RegisterEvent("PLAYER_SPECIALIZATION_CHANGED")
Nenue@0 425 hooksecurefunc("BuffFrame_UpdateAllBuffAnchors", M.PostBuffAnchors)
Nenue@0 426 hooksecurefunc("RaidBuffTray_Update", M.UpdateRaidBuffs)
Nenue@0 427 end
Nenue@0 428 print('update def')
Nenue@0 429 function M:OnUpdate ()
Nenue@0 430 M.ShowConsolidated = (IsInGroup() and GetCVarBool("consolidateBuffs"))
Nenue@0 431 M.ShowMissingBuffs = (IsInGroup() and B.Conf.RaidShowMissing)
Nenue@0 432
Nenue@0 433 for name, auraType in pairs(displays) do
Nenue@0 434 print(name, auraType)
Nenue@0 435 M.UpdateBuffs(auraType.buffName, true)
Nenue@0 436 end
Nenue@0 437
Nenue@0 438 M.UpdateAnchorAnchors()
Nenue@0 439 M.UpdateRaidBuffs()
Nenue@0 440 M.UpdateBuffsTodo()
Nenue@0 441 end