/Tukui/modules/misc/sCombo.lua

http://github.com/Asphyxia/Tukui · Lua · 138 lines · 125 code · 9 blank · 4 comment · 21 complexity · 48ac3f8dd68fec1a6fae430b6c3068b7 MD5 · raw file

  1. local T, C, L = unpack(select(2, ...)) -- Import: T - functions, constants, variables; C - config; L - locales
  2. -- sCombo (Minimal Combo Bar Replacement)
  3. -- Author: Smelly
  4. if not C.sCombo.enable or not C.unitframes.enable then return end
  5. TukuiTarget:DisableElement('CPoints')
  6. local Options = {
  7. comboWidth = T.Scale(40),
  8. comboHeight = T.Scale(11),
  9. spacing = T.Scale(3),
  10. colors = {
  11. [1] = {0.60, 0, 0, 1},
  12. [2] = {0.60, 0.30, 0, 1},
  13. [3] = {0.60, 0.60, 0, 1},
  14. [4] = {0.30, 0.60, 0, 1},
  15. [5] = {0, 0.60, 0, 1},
  16. },
  17. }
  18. local Anchor = CreateFrame("Frame", "sComboAnchor", UIParent)
  19. Anchor:CreatePanel("", ((Options.comboWidth + Options.spacing)*5)-Options.spacing, 12, "CENTER", UIParent, "CENTER", 0, -175)
  20. Anchor:SetBackdropBorderColor(1,0,0)
  21. Anchor:CreateShadow("")
  22. Anchor:SetMovable(true)
  23. Anchor:Hide()
  24. Anchor.text = Anchor:CreateFontString(nil, "OVERLAY")
  25. Anchor.text:SetFont(C.media.pixelfont, C["datatext"].fontsize, "MONOCHROMEOUTLINE")
  26. Anchor.text:SetPoint("CENTER", 0, 1)
  27. Anchor.text:SetText(T.datacolor.."Move CP-Bar (sCombo)")
  28. local sCombo = CreateFrame("Frame", "sCombo", UIParent)
  29. for i = 1, 5 do
  30. sCombo[i] = CreateFrame("Frame", "sCombo"..i, UIParent)
  31. sCombo[i]:CreatePanel("Default", Options.comboWidth, Options.comboHeight, "CENTER", UIParent, "CENTER", 0, 0)
  32. sCombo[i]:CreateShadow("Default")
  33. if C.datatext.fontsize == 8 then
  34. sCombo[i].text = sCombo[i]:CreateFontString(nil, "OVERLAY")
  35. sCombo[i].text:SetFont(C.media.pixelfont, C["datatext"].fontsize, "MONOCHROMEOUTLINE")
  36. sCombo[i].text:SetPoint("CENTER")
  37. sCombo[i].text:SetText(i)
  38. end
  39. if i == 1 then
  40. sCombo[i]:Point("TOPLEFT", Anchor, "BOTTOMLEFT", 0, -3)
  41. else
  42. sCombo[i]:Point("LEFT", sCombo[i-1], "RIGHT", Options.spacing, 0)
  43. end
  44. sCombo[i]:SetBackdropBorderColor(unpack(Options.colors[i]))
  45. sCombo[i]:RegisterEvent("PLAYER_ENTERING_WORLD")
  46. sCombo[i]:RegisterEvent("UNIT_COMBO_POINTS")
  47. sCombo[i]:RegisterEvent("PLAYER_TARGET_CHANGED")
  48. sCombo[i]:SetScript("OnEvent", function(self, event)
  49. local points, pt = 0, GetComboPoints("player", "target")
  50. if pt == points then
  51. sCombo[i]:Hide()
  52. elseif pt > points then
  53. for i = points + 1, pt do
  54. sCombo[i]:Show()
  55. end
  56. else
  57. for i = pt + 1, points do
  58. sCombo[i]:Hide()
  59. end
  60. end
  61. points = pt
  62. end)
  63. end
  64. -- slash command
  65. local move = false
  66. SLASH_MOVESCOMBO1 = "/scp"
  67. SlashCmdList.MOVESCOMBO = function()
  68. if InCombatLockdown() then print(ERR_NOT_IN_COMBAT) return end
  69. if not move then
  70. move = true
  71. Anchor:EnableMouse(true)
  72. Anchor:Show()
  73. Anchor:SetScript("OnMouseDown", function(self) self:StartMoving() end)
  74. Anchor:SetScript("OnMouseUp", function(self) self:StopMovingOrSizing() end)
  75. for i = 1,5 do
  76. sCombo[i]:Show()
  77. sCombo[i]:UnregisterAllEvents()
  78. end
  79. else
  80. move = false
  81. Anchor:EnableMouse(false)
  82. Anchor:Hide()
  83. for i = 1,5 do
  84. sCombo[i]:Hide()
  85. sCombo[i]:RegisterEvent("PLAYER_ENTERING_WORLD")
  86. sCombo[i]:RegisterEvent("UNIT_COMBO_POINTS")
  87. sCombo[i]:RegisterEvent("PLAYER_TARGET_CHANGED")
  88. end
  89. end
  90. end
  91. -- energy bar
  92. if not C.sCombo.energybar or not C.unitframes.enable then return end
  93. local sPowerBG = CreateFrame("Frame", "sPowerBG", TukuiTarget)
  94. sPowerBG:CreatePanel(nil, (Options.comboWidth * 5) + (Options.spacing * 5) - Options.spacing, Options.comboHeight, "TOPLEFT", Anchor, "BOTTOMLEFT", 0, -(Options.comboHeight+6))
  95. sPowerBG:CreateShadow()
  96. local sPowerStatus = CreateFrame("StatusBar", "sPowerStatus", TukuiTarget)
  97. sPowerStatus:SetStatusBarTexture(C.media.normTex)
  98. sPowerStatus:SetFrameLevel(6)
  99. sPowerStatus:Point("TOPLEFT", sPowerBG, "TOPLEFT", 2, -2)
  100. sPowerStatus:Point("BOTTOMRIGHT", sPowerBG, "BOTTOMRIGHT", -2, 2)
  101. sPowerStatus.t = sPowerStatus:CreateFontString(nil, "OVERLAY")
  102. sPowerStatus.t:SetPoint("CENTER")
  103. sPowerStatus.t:SetFont(C.media.pixelfont, C["datatext"].fontsize, "MONOCHROMEOUTLINE")
  104. sPowerStatus.t:SetShadowOffset(0.5, -0.5)
  105. sPowerStatus.t:SetShadowColor(0,0,0)
  106. local color = RAID_CLASS_COLORS[T.myclass]
  107. sPowerStatus:SetStatusBarColor(color.r, color.g, color.b)
  108. local t = 0
  109. sPowerStatus:SetScript("OnUpdate", function(self, elapsed)
  110. t = t + elapsed;
  111. if (t > 0.07) then
  112. sPowerStatus:SetMinMaxValues(0, UnitPowerMax("player"))
  113. local power = UnitPower("player")
  114. sPowerStatus:SetValue(power)
  115. sPowerStatus.t:SetText(power)
  116. end
  117. end)
  118. sPowerBG:RegisterEvent("PLAYER_ENTERING_WORLD")
  119. sPowerBG:RegisterEvent("UNIT_DISPLAYPOWER")
  120. sPowerBG:SetScript("OnEvent", function(self, event)
  121. local p, _ = UnitPowerType("player")
  122. if p == SPELL_POWER_ENERGY then
  123. sPowerBG:Show()
  124. sPowerStatus:Show()
  125. else
  126. sPowerBG:Hide()
  127. sPowerStatus:Hide()
  128. end
  129. end)