/Tukui/modules/blizzard/achievements.lua

http://github.com/Asphyxia/Tukui · Lua · 81 lines · 70 code · 11 blank · 0 comment · 22 complexity · 90a92a861ff232b0088605081a71ed39 MD5 · raw file

  1. local T, C, L = unpack(select(2, ...)) -- Import: T - functions, constants, variables; C - config; L - locales
  2. local AchievementHolder = CreateFrame("Frame", "TukuiAchievementHolder", UIParent)
  3. AchievementHolder:Width(180)
  4. AchievementHolder:Height(20)
  5. AchievementHolder:SetPoint("CENTER", UIParent, "CENTER", 0, 170)
  6. AchievementHolder:SetTemplate("Default")
  7. AchievementHolder:SetBackdropBorderColor(1, 0, 0)
  8. AchievementHolder:SetClampedToScreen(true)
  9. AchievementHolder:SetMovable(true)
  10. AchievementHolder:SetAlpha(0)
  11. AchievementHolder.text = T.SetFontString(AchievementHolder, C.media.pixelfont, C["datatext"].fontsize, "MONOCHROMEOUTLINE")
  12. AchievementHolder.text:SetPoint("CENTER")
  13. AchievementHolder.text:SetText(L.move_achievements)
  14. local pos = "TOP"
  15. function T.AchievementMove(self, event, ...)
  16. local previousFrame
  17. for i=1, MAX_ACHIEVEMENT_ALERTS do
  18. local aFrame = _G["AchievementAlertFrame"..i]
  19. if ( aFrame ) then
  20. aFrame:ClearAllPoints()
  21. if pos == "TOP" then
  22. if ( previousFrame and previousFrame:IsShown() ) then
  23. aFrame:SetPoint("TOP", previousFrame, "BOTTOM", 0, -10)
  24. else
  25. aFrame:SetPoint("TOP", AchievementHolder, "BOTTOM")
  26. end
  27. else
  28. if ( previousFrame and previousFrame:IsShown() ) then
  29. aFrame:SetPoint("BOTTOM", previousFrame, "TOP", 0, 10)
  30. else
  31. aFrame:SetPoint("BOTTOM", AchievementHolder, "TOP")
  32. end
  33. end
  34. previousFrame = aFrame
  35. end
  36. end
  37. end
  38. hooksecurefunc("AchievementAlertFrame_FixAnchors", T.AchievementMove)
  39. hooksecurefunc("DungeonCompletionAlertFrame_FixAnchors", function()
  40. for i=MAX_ACHIEVEMENT_ALERTS, 1, -1 do
  41. local aFrame = _G["AchievementAlertFrame"..i]
  42. if ( aFrame and aFrame:IsShown() ) then
  43. DungeonCompletionAlertFrame1:ClearAllPoints()
  44. if pos == "TOP" then
  45. DungeonCompletionAlertFrame1:SetPoint("TOP", aFrame, "BOTTOM", 0, -10)
  46. else
  47. DungeonCompletionAlertFrame1:SetPoint("BOTTOM", aFrame, "TOP", 0, 10)
  48. end
  49. return
  50. end
  51. DungeonCompletionAlertFrame1:ClearAllPoints()
  52. if pos == "TOP" then
  53. DungeonCompletionAlertFrame1:SetPoint("TOP", AchievementHolder, "BOTTOM")
  54. else
  55. DungeonCompletionAlertFrame1:SetPoint("BOTTOM", AchievementHolder, "TOP")
  56. end
  57. end
  58. end)
  59. function T.PostAchievementMove(frame)
  60. local point = select(1, frame:GetPoint())
  61. if string.find(point, "TOP") or point == "CENTER" or point == "LEFT" or point == "RIGHT" then
  62. pos = "TOP"
  63. else
  64. pos = "BOTTOM"
  65. end
  66. T.AchievementMove()
  67. end
  68. local frame = CreateFrame("Frame")
  69. frame:RegisterEvent("ACHIEVEMENT_EARNED")
  70. frame:SetScript("OnEvent", function(self, event, ...) T.AchievementMove(self, event, ...) end)