comparison Modules/BuffFrame.lua @ 106:6fa74abd83fd

- Fixed config layer inconsistencies
author Nenue
date Sun, 29 Jan 2017 09:55:40 -0500
parents 5476337198ec
children a41f6b74709a
comparison
equal deleted inserted replaced
105:3992b41c637e 106:6fa74abd83fd
19 local BUFF_PROGRESS_SIZE = 4 19 local BUFF_PROGRESS_SIZE = 4
20 local BUFF_PROGRESS_INSET = 2 20 local BUFF_PROGRESS_INSET = 2
21 local PROGRESS_ANCHOR = 'BOTTOM' 21 local PROGRESS_ANCHOR = 'BOTTOM'
22 local PROGRESS_PARENT 22 local PROGRESS_PARENT
23 local PROGRESS_OFFSET = 1 23 local PROGRESS_OFFSET = 1
24 local BUFF_MAX_DISPLAY = 24
25 local DEBUFF_MAX_DISPLAY = 12
24 26
25 local BUFF_BUTTON_ZOOM = .15 27 local BUFF_BUTTON_ZOOM = .15
26 local BORDER_SIZE_L = 2 28 local BORDER_SIZE_L = 2
27 local BORDER_SIZE_R = 2 29 local BORDER_SIZE_R = 2
28 local BORDER_SIZE_U = 2 30 local BORDER_SIZE_U = 2
254 -- play nice with Blizzard's frame locking structure 256 -- play nice with Blizzard's frame locking structure
255 FRAMELOCK_STATES.PETBATTLES[self:GetName()] = "hidden" 257 FRAMELOCK_STATES.PETBATTLES[self:GetName()] = "hidden"
256 FRAMELOCK_STATES.PETBATTLES[self.underlay:GetName()] = "hidden" 258 FRAMELOCK_STATES.PETBATTLES[self.underlay:GetName()] = "hidden"
257 end 259 end
258 260
261 plugin.defaultSettings = {
262 width = 48,
263 height = 48,
264 }
265
259 function plugin:AcquireConfigButton(name) 266 function plugin:AcquireConfigButton(name)
260 print('|cFF88FF00Creating config dummy', name,'Veneer') 267 print('|cFF88FF00Creating config dummy', name,'Veneer')
261 local button = self.Buttons[name] 268 local button = self.Buttons[name]
262 if not button then 269 if not button then
263 button = CreateFrame('Frame', name .. 'Veneer', self, 'VeneerBuffTemplate') 270 button = CreateFrame('Frame', name .. 'Veneer', self, 'VeneerBuffTemplate')
313 320
314 local icon = _G[name .. 'Icon'] 321 local icon = _G[name .. 'Icon']
315 local border = _G[name .. 'Border'] 322 local border = _G[name .. 'Border']
316 local count = _G[name .. 'Count'] 323 local count = _G[name .. 'Count']
317 local duration = _G[name .. 'Duration'] 324 local duration = _G[name .. 'Duration']
318 local veneer = self:Acquire(name) 325 local facade = self:Acquire(name)
319 local offset = BUFF_BUTTON_ZOOM/2 326 local offset = BUFF_BUTTON_ZOOM/2
320 327
321 self.DetectedFrames[frame] = frame 328 self.DetectedFrames[frame] = frame
322 frame:SetSize(BUFF_BUTTON_SIZE,BUFF_BUTTON_SIZE) 329 frame:SetSize(BUFF_BUTTON_SIZE,BUFF_BUTTON_SIZE)
323 icon:SetTexCoord(offset, 1 - offset, offset, 1 - offset) 330 icon:SetTexCoord(offset, 1 - offset, offset, 1 - offset)
324 331
325 332
326 DoRegionHooks(veneer, border) 333 DoRegionHooks(facade, border)
327 if border then 334 if border then
328 local color = DebuffTypeColor["none"] 335 local color = DebuffTypeColor["none"]
329 if aurasCache[frame] and aurasCache[frame][5] then 336 if aurasCache[frame] and aurasCache[frame][5] then
330 color = DebuffTypeColor[aurasCache[frame][5]] 337 color = DebuffTypeColor[aurasCache[frame][5]]
331 end 338 end
332 veneer.progress.fg:SetColorTexture(color.r,color.g,color.b) 339 facade.progress.fg:SetColorTexture(color.r,color.g,color.b)
333 veneer.border:SetColorTexture(0,0,0,1) 340 facade.border:SetColorTexture(0,0,0,1)
334 veneer.border:Show() 341 facade.border:Show()
335 else 342 else
336 veneer.border:SetColorTexture(0,0,0,1) 343 facade.border:SetColorTexture(0,0,0,1)
337 veneer.border:Show() 344 facade.border:Show()
338 end 345 end
339 346
340 if count then 347 if count then
341 count:ClearAllPoints() 348 count:ClearAllPoints()
342 hooksecurefunc(count, 'Show', function(self) self:Hide() end) 349 hooksecurefunc(count, 'Show', function(self) self:Hide() end)
343 if count:GetText() then 350 if count:GetText() then
344 veneer.count:SetText(count:GetText()) 351 facade.count:SetText(count:GetText())
345 end 352 end
346 end 353 end
347 if duration then 354 if duration then
348 duration:ClearAllPoints() 355 duration:ClearAllPoints()
349 end 356 end
350 357
351 hooksecurefunc(frame, "Hide", function(frame) 358 hooksecurefunc(frame, "Hide", function(frame)
352 veneer:Hide() 359 facade:Hide()
353 end) 360 end)
354 361
355 hooksecurefunc(frame, 'Show', function(frame) 362 hooksecurefunc(frame, 'Show', function(frame)
356 veneer:Show() 363 facade:Show()
357 end) 364 end)
358 365
359 hooksecurefunc(frame, 'SetShown', function(frame, isShown) 366 hooksecurefunc(frame, 'SetShown', function(frame, isShown)
360 veneer:SetShown(isShown) 367 facade:SetShown(isShown)
361 end) 368 end)
362 369
363 370 facade.IsAcquired = true
364 veneer:SetParent(UIParent) 371 facade:SetParent(UIParent)
365 veneer:SetAllPoints(frame) 372 facade:SetAllPoints(frame)
366 veneer:SetFrameStrata('MEDIUM') 373 facade:SetFrameStrata('MEDIUM')
367 end 374 end
368 375
369 376
370 --- Set widgets to reflect the passed parameters 377 --- Set widgets to reflect the passed parameters
371 function plugin:UpdateButton (name, duration, expires) 378 function plugin:UpdateButton (name, duration, expires)
372 local frame = _G[name] 379 local frame = _G[name]
373 local veneer = self:Acquire(name) 380 local facade = self:Acquire(name)
374 -- is it a new button? 381 -- is it a new button?
375 if not self.DetectedFrames[frame] then 382 if not self.DetectedFrames[frame] then
376 print('|cFFFF4400detected', name) 383 print('|cFFFF4400detected', name)
377 self:SetupButton(name) 384 self:SetupButton(name)
378 end 385 end
379 print(veneer:GetParent():GetName(), veneer:GetPoint(1)) 386 print(facade:GetParent():GetName(), facade:GetPoint(1))
380 --[[ 387 --[[
381 if frame.count then 388 if frame.count then
382 frame.count:SetText('test') 389 frame.count:SetText('test')
383 frame.count:Show() 390 frame.count:Show()
384 end 391 end
389 if expires and duration then 396 if expires and duration then
390 if duration ~= 0 then 397 if duration ~= 0 then
391 local startTime = (expires - duration) 398 local startTime = (expires - duration)
392 local endTime = expires or 0 399 local endTime = expires or 0
393 print('|cFF0088FF'..frame:GetName()..'|r', duration, expires) 400 print('|cFF0088FF'..frame:GetName()..'|r', duration, expires)
394 veneer.progress:Show() 401 facade.progress:Show()
395 veneer.elapsed = 0 402 facade.elapsed = 0
396 veneer.progress:SetScript('OnUpdate', function(self, elapsed) 403 facade.progress:SetScript('OnUpdate', function(self, elapsed)
397 veneer.elapsed = veneer.elapsed + elapsed 404 facade.elapsed = facade.elapsed + elapsed
398 405
399 local w = floor(veneer.progress:GetWidth()+.5) - (BUFF_PROGRESS_INSET*2) 406 local w = floor(facade.progress:GetWidth()+.5) - (BUFF_PROGRESS_INSET*2)
400 local t = GetTime() 407 local t = GetTime()
401 local progress = (t - startTime) / duration 408 local progress = (t - startTime) / duration
402 409
403 local nw = (w - (w * progress)) 410 local nw = (w - (w * progress))
404 if veneer.elapsed >= 0.25 then 411 if facade.elapsed >= 0.25 then
405 412
406 --tprint(t, startTime, floor(progress*100), w * progress, nw, w) 413 --tprint(t, startTime, floor(progress*100), w * progress, nw, w)
407 veneer.elapsed = 0.25 - veneer.elapsed 414 facade.elapsed = 0.25 - facade.elapsed
408 end 415 end
409 if (progress >= 1) or not frame:IsVisible() then 416 if (progress >= 1) or not frame:IsVisible() then
410 veneer.startTime = nil 417 facade.startTime = nil
411 self:Hide() 418 self:Hide()
412 self:SetScript('OnUpdate', nil) 419 self:SetScript('OnUpdate', nil)
413 else 420 else
414 self.fg:SetWidth(nw) 421 self.fg:SetWidth(nw)
415 end 422 end
416 end) 423 end)
417 424
418 veneer.cooldown:Show() 425 facade.cooldown:Show()
419 veneer.cooldown:SetCooldown(startTime, duration) 426 facade.cooldown:SetCooldown(startTime, duration)
420 else 427 else
421 print('|cFF00FF88'..frame:GetName()..'|r', 'duration zero') 428 print('|cFF00FF88'..frame:GetName()..'|r', 'duration zero')
422 veneer.progress:SetScript('OnUpdate', nil) 429 facade.progress:SetScript('OnUpdate', nil)
423 veneer.progress:Hide() 430 facade.progress:Hide()
424 veneer.cooldown:Hide() 431 facade.cooldown:Hide()
425 end 432 end
426 433
427 if count and count > 1 then 434 if count and count > 1 then
428 veneer.count:SetText(count) 435 facade.count:SetText(count)
429 veneer.count:Show() 436 facade.count:Show()
430 frame.count:ClearAllPoints() 437 frame.count:ClearAllPoints()
431 else 438 else
432 veneer.count:Hide() 439 facade.count:Hide()
433 end 440 end
434 441
435 442
436 else 443 else
437 veneer.progress:Hide() 444 facade.progress:Hide()
438 veneer.cooldown:SetCooldown(0,0) 445 facade.cooldown:SetCooldown(0,0)
439 veneer.cooldown:Hide() 446 facade.cooldown:Hide()
440 print('|cFF88FF00'..frame:GetName()..'|r', 'nil duration') 447 print('|cFF88FF00'..frame:GetName()..'|r', 'nil duration')
441 end 448 end
442 veneer:Show() 449 facade:Show()
443 end 450 end
444 451
445 452
446 --- Provides the number of changed indices for use in deciding between partial and full veneer updates 453 --- Provides the number of changed indices for use in deciding between partial and full veneer updates
447 function plugin:ButtonHasChanged (frame, ...) 454 function plugin:ButtonHasChanged (frame, ...)
490 local maxColumn = 1 497 local maxColumn = 1
491 local limit = self.configMode and BUFF_MAX_DISPLAY or BUFF_ACTUAL_DISPLAY 498 local limit = self.configMode and BUFF_MAX_DISPLAY or BUFF_ACTUAL_DISPLAY
492 for i = 1, limit do 499 for i = 1, limit do
493 local name = 'BuffButton'..i 500 local name = 'BuffButton'..i
494 local buff = _G[name] or self.Buttons[name] 501 local buff = _G[name] or self.Buttons[name]
495 print(buff:GetName(), self.configMode) 502 print(i, name, buff)
496 if buff then 503 if buff then
497 numBuffs = numBuffs + 1 504 numBuffs = numBuffs + 1
498 buff:ClearAllPoints() 505 buff:ClearAllPoints()
499 if mod(numBuffs,BUFFS_PER_ROW) == 1 then 506 if mod(numBuffs,BUFFS_PER_ROW) == 1 then
500 if numBuffs == 1 then 507 if numBuffs == 1 then
517 end 524 end
518 end 525 end
519 526
520 numBuffs = 0 527 numBuffs = 0
521 limit = self.configMode and DEBUFF_MAX_DISPLAY or DEBUFF_ACTUAL_DISPLAY 528 limit = self.configMode and DEBUFF_MAX_DISPLAY or DEBUFF_ACTUAL_DISPLAY
522 for i = 1, DEBUFF_ACTUAL_DISPLAY do 529 local lastDebuff
530 local topDebuff = topBuff
531 for i = 1, limit do
523 local name = 'DebuffButton'..i 532 local name = 'DebuffButton'..i
524 local debuff = _G[name] or self.Buttons[name] 533 local debuff = _G[name] or self.Buttons[name]
534 print(i, name, debuff)
525 if debuff then 535 if debuff then
526 numBuffs = numBuffs + 1 536 numBuffs = numBuffs + 1
527 if mod(numBuffs, BUFFS_PER_ROW) == 1 then 537 if mod(numBuffs, BUFFS_PER_ROW) == 1 then
528 538
529 if topBuff then 539 if topDebuff then
530 debuff:SetPoint('TOPRIGHT', topBuff, 'BOTTOMRIGHT', 0, -BUFF_BUTTON_SPACING_V) 540 debuff:SetPoint('TOPRIGHT', topDebuff, 'BOTTOMRIGHT', 0, -BUFF_BUTTON_SPACING_V)
531 else 541 else
532 debuff:SetPoint('TOPRIGHT', UIParent, 'TOPRIGHT', BUFF_FRAMES_X, BUFF_FRAMES_Y) 542 debuff:SetPoint('TOPRIGHT', UIParent, 'TOPRIGHT', BUFF_FRAMES_X, BUFF_FRAMES_Y)
533 end 543 end
534 topBuff = debuff 544 topDebuff = debuff
535 545
536 else 546 else
537 debuff:SetPoint('TOPRIGHT', lastBuff, 'TOPLEFT', -BUFF_BUTTON_SPACING_H, 0) 547 debuff:SetPoint('TOPRIGHT', lastDebuff, 'TOPLEFT', -BUFF_BUTTON_SPACING_H, 0)
538 end 548 end
539 lastBuff = debuff 549 lastDebuff = debuff
540 550
541 end 551 end
542 end 552 end
543 553
544 if lastBuff then 554 if lastBuff then
554 self:SetShown(configMode) 564 self:SetShown(configMode)
555 self.configMode = configMode 565 self.configMode = configMode
556 for i = 1, BUFF_MAX_DISPLAY do 566 for i = 1, BUFF_MAX_DISPLAY do
557 local name = 'BuffButton' .. i 567 local name = 'BuffButton' .. i
558 local button = self:AcquireConfigButton(name) 568 local button = self:AcquireConfigButton(name)
569 if not button.IsAcquired then
570 button.underlay.bg:SetColorTexture(0,1,0,0.5)
571 end
559 end 572 end
560 for i = 1, DEBUFF_MAX_DISPLAY do 573 for i = 1, DEBUFF_MAX_DISPLAY do
561 local name = 'DebuffButton' .. i 574 local name = 'DebuffButton' .. i
562 local button = self:AcquireConfigButton(name) 575 local button = self:AcquireConfigButton(name)
563 end 576 if not button.IsAcquired then
577 button.underlay.bg:SetColorTexture(1,0,0,0.5)
578 end
579 end
580 self:OnUpdateAllBuffAnchors()
564 end 581 end
565 function plugin:OnUpdateDuration (frame, timeLeft) 582 function plugin:OnUpdateDuration (frame, timeLeft)
566 local veneer = self:Acquire(frame:GetName()) 583 local veneer = self:Acquire(frame:GetName())
567 local hours = floor(timeLeft/3600) 584 local hours = floor(timeLeft/3600)
568 local minutes = floor(mod(timeLeft, 3600)/60) 585 local minutes = floor(mod(timeLeft, 3600)/60)