annotate BuffButton.lua @ 37:e84d645c8ab8

- revised the tracker update function to build its complete data list up front and use the values as points of comparison for determining possible out of place blocks, which will be iterated over afterward to remove what wasn't re-used - also entailed revising the exact role of global event handlers and function hooks, limiting their directions of communication so one doesn't end up calling the other multiple or inifinity times - schema handling polish
author Nenue
date Mon, 18 Apr 2016 07:56:23 -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