/Tukui/modules/actionbars/BarShift.lua

http://github.com/Asphyxia/Tukui · Lua · 137 lines · 119 code · 10 blank · 8 comment · 28 complexity · 589bb89281e6d3fb8c6ace510af04c9f MD5 · raw file

  1. local T, C, L = unpack(select(2, ...)) -- Import: T - functions, constants, variables; C - config; L - locales
  2. if not C["actionbar"].enable == true then return end
  3. ---------------------------------------------------------------------------
  4. -- Setup Shapeshift Bar
  5. ---------------------------------------------------------------------------
  6. local TukuiShift = CreateFrame("Frame", "TukuiShiftBar", UIParent)
  7. if T.myclass ~= "SHAMAN" and C["actionbar"].vertical_shapeshift then
  8. TukuiShift:Width(T.stancebuttonsize + 10)
  9. else
  10. TukuiShift:Height(T.stancebuttonsize + 10)
  11. end
  12. TukuiShift:Point("BOTTOMLEFT", TukuiChatBackgroundLeft, "BOTTOMRIGHT", 3, 0)
  13. -- TukuiShift:SetFrameLevel(20)
  14. TukuiShift:SetFrameStrata("MEDIUM")
  15. TukuiShift:SetMovable(true)
  16. TukuiShift:SetClampedToScreen(true)
  17. TukuiShift:SetScript("OnEvent", function(self, event, ...)
  18. if C["actionbar"].hideshapeshift then TukuiShift:Hide() return end
  19. if T.myclass == "SHAMAN" then
  20. TukuiShift:Width(210)
  21. TukuiShift:SetBackdropBorderColor(0,0,0,0)
  22. TukuiShift:SetBackdropBorderColor(0,0,0,0)
  23. else
  24. TukuiShift:SetTemplate("Transparent")
  25. TukuiShift:CreateShadow("Default")
  26. TukuiShift:CreateBorder(true, true)
  27. local forms = GetNumShapeshiftForms()
  28. if forms > 0 then
  29. if InCombatLockdown() then return end
  30. if C["actionbar"].vertical_shapeshift then
  31. TukuiShift:Height((T.stancebuttonsize * forms) + (T.buttonspacing * forms + 1) + 5)
  32. else
  33. TukuiShift:Width((T.stancebuttonsize * forms) + (T.buttonspacing * forms + 1) + 5)
  34. end
  35. TukuiShift:Show()
  36. else
  37. if InCombatLockdown() then return end
  38. TukuiShift:Hide()
  39. end
  40. end
  41. end)
  42. TukuiShift:RegisterEvent("PLAYER_LOGIN")
  43. TukuiShift:RegisterEvent("PLAYER_ENTERING_WORLD")
  44. TukuiShift:RegisterEvent("UPDATE_SHAPESHIFT_FORMS")
  45. TukuiShift:RegisterEvent("UPDATE_SHAPESHIFT_FORM")
  46. TukuiShift:RegisterEvent("ACTIVE_TALENT_GROUP_CHANGED")
  47. TukuiShift:RegisterEvent("UPDATE_MULTI_CAST_ACTIONBAR")
  48. -- shapeshift command to move totem or shapeshift in-game
  49. local ssmover = CreateFrame("Frame", "TukuiShapeShiftHolder", UIParent)
  50. ssmover:SetParent(TukuiShift)
  51. ssmover:SetAllPoints(TukuiShift)
  52. ssmover:SetTemplate("Default")
  53. ssmover:SetBackdropBorderColor(1,0,0)
  54. ssmover:SetAlpha(0)
  55. ssmover.text = T.SetFontString(ssmover, C.media.pixelfont, C["datatext"].fontsize, "MONOCHROMEOUTLINE")
  56. ssmover.text:SetPoint("CENTER")
  57. ssmover.text:SetText(L.move_shapeshift)
  58. -- create the shapeshift bar if we enabled it
  59. local bar = CreateFrame("Frame", "TukuiShapeShift", TukuiShift, "SecureHandlerStateTemplate")
  60. bar:ClearAllPoints()
  61. bar:SetAllPoints(TukuiShift)
  62. local States = {
  63. ["DRUID"] = "show",
  64. ["WARRIOR"] = "show",
  65. ["PALADIN"] = "show",
  66. ["DEATHKNIGHT"] = "show",
  67. ["ROGUE"] = "show,",
  68. ["PRIEST"] = "show,",
  69. ["HUNTER"] = "show,",
  70. ["WARLOCK"] = "show,",
  71. }
  72. bar:RegisterEvent("PLAYER_LOGIN")
  73. bar:RegisterEvent("PLAYER_ENTERING_WORLD")
  74. bar:RegisterEvent("UPDATE_SHAPESHIFT_FORMS")
  75. bar:RegisterEvent("UPDATE_SHAPESHIFT_USABLE")
  76. bar:RegisterEvent("UPDATE_SHAPESHIFT_COOLDOWN")
  77. bar:RegisterEvent("UPDATE_SHAPESHIFT_FORM")
  78. bar:RegisterEvent("ACTIONBAR_PAGE_CHANGED")
  79. bar:SetScript("OnEvent", function(self, event, ...)
  80. if event == "PLAYER_LOGIN" then
  81. local button
  82. for i = 1, NUM_SHAPESHIFT_SLOTS do
  83. button = _G["ShapeshiftButton"..i]
  84. button:ClearAllPoints()
  85. button:SetParent(self)
  86. button:SetFrameStrata(TukuiShift:GetFrameStrata())
  87. if i == 1 then
  88. if C["actionbar"].vertical_shapeshift then
  89. button:Point("TOPLEFT", 5, -5)
  90. else
  91. button:Point("BOTTOMLEFT", 5, 5)
  92. end
  93. else
  94. local previous = _G["ShapeshiftButton"..i-1]
  95. if C["actionbar"].vertical_shapeshift then
  96. button:Point("TOP", previous, "BOTTOM", 0, -T.buttonspacing)
  97. else
  98. button:Point("LEFT", previous, "RIGHT", T.buttonspacing, 0)
  99. end
  100. end
  101. local _, name = GetShapeshiftFormInfo(i)
  102. if name then
  103. button:Show()
  104. end
  105. end
  106. RegisterStateDriver(self, "visibility", States[T.myclass] or "hide")
  107. elseif event == "UPDATE_SHAPESHIFT_FORMS" then
  108. -- Update Shapeshift Bar Button Visibility
  109. -- I seriously don't know if it's the best way to do it on spec changes or when we learn a new stance.
  110. if InCombatLockdown() then return end -- > just to be safe ;p
  111. local button
  112. for i = 1, NUM_SHAPESHIFT_SLOTS do
  113. button = _G["ShapeshiftButton"..i]
  114. local _, name = GetShapeshiftFormInfo(i)
  115. if name then
  116. button:Show()
  117. else
  118. button:Hide()
  119. end
  120. end
  121. T.TukuiShiftBarUpdate()
  122. elseif event == "PLAYER_ENTERING_WORLD" then
  123. T.StyleShift()
  124. else
  125. T.TukuiShiftBarUpdate()
  126. end
  127. end)