Advertisement
Guest User

lock bars by Coldkil

a guest
Jul 21st, 2012
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.37 KB | None | 0 0
  1. --get the addon namespace
  2. local addon, ns = ...
  3. --get the config values
  4. local cfg = ns.cfg
  5. -- get the library
  6. local lib = ns.lib
  7.  
  8. if lib.getClass("player") ~= "WARLOCK" then return end
  9. local pp = lib.scale
  10.  
  11. local MAX_POWER_PER_EMBER = 10
  12. local SPELL_POWER_DEMONIC_FURY = SPELL_POWER_DEMONIC_FURY
  13. local SPELL_POWER_BURNING_EMBERS = SPELL_POWER_BURNING_EMBERS
  14. local SPELL_POWER_SOUL_SHARDS = SPELL_POWER_SOUL_SHARDS
  15. local destro = SPEC_WARLOCK_DESTRUCTION
  16. local affli = SPEC_WARLOCK_AFFLICTION
  17. local demo = SPEC_WARLOCK_DEMONOLOGY
  18.  
  19. local shardc = {139/255, 51/255, 188/255}
  20. local emberc = {189/255, 71/255, 58/255}
  21. local furyc  = {119/255, 238/255, 28/255}
  22.  
  23.  
  24. local shards = {}
  25. local embers = {}
  26. local demofury
  27. local shardnum, embernum
  28.  
  29. -- container for the magic
  30. local lockbar = CreateFrame("Frame", nil, ColdPlayer)
  31.  
  32. -- containers for the widgets
  33. local shardbar = CreateFrame("Frame", "ColdShardbar", lockbar)
  34. shardbar:SetSize(95,12)
  35. shardbar:SetFrameLevel(6)
  36. shardbar:SetPoint("BOTTOMRIGHT", ColdPlayer.Health, "BOTTOMRIGHT", 5, 1)
  37.  
  38. local emberbar = CreateFrame("Frame", "ColdEmberbar", lockbar)
  39. emberbar:SetSize(200, 8)
  40. emberbar:SetFrameLevel(2)
  41. emberbar:SetPoint("BOTTOM", ColdPlayer, "TOP", 0, 7)
  42.  
  43. local furybar = CreateFrame("Frame", "ColdFurybar", lockbar)
  44. furybar:SetSize(200, 8)
  45. furybar:SetFrameLevel(2)
  46. furybar:SetPoint("BOTTOM", ColdPlayer, "TOP", 0, 7)
  47.  
  48.  
  49. local function juggleBars(spec)
  50.   if spec then
  51.     if spec ~= affli then
  52.         if spec == destro then
  53.             emberbar:Show()
  54.             shardbar:Hide()
  55.             furybar:Hide()
  56.         else
  57.             emberbar:Hide()
  58.             shardbar:Hide()
  59.             furybar:Show()
  60.         end
  61.     else
  62.         emberbar:Hide()
  63.         shardbar:Show()
  64.         furybar:Hide()
  65.     end
  66.   else
  67.     emberbar:Hide()
  68.     shardbar:Hide()
  69.     furybar:Hide()
  70.   end  
  71. end
  72.  
  73. local function updateBars()
  74.     local spec = GetSpecialization()
  75.     -- show the correct bar, hide the unnecessary ones
  76.     juggleBars(spec)
  77.    
  78.     if spec then
  79.         if spec == affli then
  80.             local numShards = UnitPower("player", SPELL_POWER_SOUL_SHARDS)
  81.             local maxShards = UnitPowerMax("player", SPELL_POWER_SOUL_SHARDS)
  82.            
  83.             --check for affli glyph
  84.             if shardnum ~= maxShards then
  85.                 for i = 3, 1, -1 do
  86.                     if i == 3 then shards[i]:SetPoint("RIGHT", shardbar)
  87.                     else shards[i]:SetPoint("RIGHT", shards[i+1], "LEFT") end
  88.                 end
  89.             else
  90.                 for i = 4, 1, -1 do
  91.                     if i == 4 then shards[i]:SetPoint("RIGHT", shardbar)
  92.                     else shards[i]:SetPoint("RIGHT", shards[i+1], "LEFT") end
  93.                 end
  94.             end
  95.            
  96.             for i = 1, maxShards do
  97.                 if i <= numShards then
  98.                     shards[i]:SetTextColor(unpack(shardc))
  99.                 else
  100.                     shards[i]:SetTextColor(.9,.7,.9)
  101.                 end
  102.             end
  103.             shardnum = maxShards
  104.  
  105.         elseif spec == destro then
  106.             local power = UnitPower("player", SPELL_POWER_BURNING_EMBERS, true)
  107.             local maxPower = UnitPowerMax("player", SPELL_POWER_BURNING_EMBERS, true)
  108.             local numEmbers = power / MAX_POWER_PER_EMBER
  109.             local numBars = floor(maxPower / MAX_POWER_PER_EMBER)
  110.            
  111.             --check for destro glyph
  112.             if embernum ~= numBars then
  113.                 for i = 1, 3 do
  114.                     embers[i]:SetSize(pp(64),pp(8))
  115.  
  116.                 end
  117.                 embers[4]:Hide()
  118.             else
  119.                 for i = 1, 4 do
  120.                     embers[i]:SetSize(pp(46),pp(8))
  121.                     embers[i]:Show()
  122.                 end    
  123.             end
  124.            
  125.             for i = 1, numBars do
  126.                 embers[i]:SetMinMaxValues((MAX_POWER_PER_EMBER * i) - MAX_POWER_PER_EMBER, MAX_POWER_PER_EMBER * i)
  127.                 embers[i]:SetValue(power)
  128.             end
  129.             embernum = numBars
  130.            
  131.         elseif spec == demo then
  132.             local power = UnitPower("player", SPELL_POWER_DEMONIC_FURY)
  133.             local maxPower = UnitPowerMax("player", SPELL_POWER_DEMONIC_FURY)
  134.            
  135.             demofury:SetMinMaxValues(0, maxPower)
  136.             demofury:SetValue(power)
  137.         end
  138.     end
  139. end
  140.  
  141. local function createBars()
  142.     for i = 1,4 do
  143.         embers[i] = CreateFrame("StatusBar", "ColdEmber"..i, emberbar)
  144.         embers[i]:SetStatusBarTexture(cfg.tex)
  145.         embers[i]:SetStatusBarColor(unpack(emberc))
  146.         if i == 1 then
  147.             embers[i]:SetPoint("LEFT", emberbar)
  148.         else
  149.             embers[i]:SetPoint("LEFT", embers[i-1], "RIGHT", pp(4), 0)
  150.         end
  151.         local shadow = CreateFrame("Frame", nil, embers[i])
  152.         shadow:SetBackdrop(backdrop)
  153.         shadow:SetBackdropColor(.2,.2,.2,.6)
  154.         shadow:SetBackdropBorderColor(0,0,0)
  155.         shadow:SetPoint('TOPLEFT', -1, 1)
  156.         shadow:SetPoint('BOTTOMRIGHT', 1, -1)
  157.         shadow:SetFrameLevel(1)
  158.         embers[i].sh = shadow
  159.     end
  160.     embernum = 4
  161.    
  162.     for i = 4, 1, -1 do
  163.         shards[i] = lib.SetFontString(shardbar, cfg.font, cfg.fontsize, "OUTLINE, MONOCHROME")
  164.         shards[i]:SetText"Sh"
  165.         shards[i]:SetSize(20,12)
  166.         if i == 4 then
  167.             shards[i]:SetPoint("RIGHT", shardbar)
  168.         else
  169.             shards[i]:SetPoint("RIGHT", shards[i+1], "LEFT")
  170.         end
  171.     end
  172.     shardnum = 4
  173.    
  174.     demofury = CreateFrame("StatusBar", "ColdDemoFury", furybar)
  175.     demofury:SetSize(200,8)
  176.     demofury:SetPoint"CENTER"
  177.     demofury:SetStatusBarTexture(cfg.tex)
  178.     demofury:SetStatusBarColor(unpack(furyc))
  179.     local shadowf = CreateFrame("Frame", nil, demofury)
  180.     shadowf:SetBackdrop(backdrop)
  181.     shadowf:SetBackdropColor(.2,.2,.2,.6)
  182.     shadowf:SetBackdropBorderColor(0,0,0)
  183.     shadowf:SetPoint('TOPLEFT', -1, 1)
  184.     shadowf:SetPoint('BOTTOMRIGHT', 1, -1)
  185.     shadowf:SetFrameLevel(1)
  186.     demofury.sh = shadowf
  187.    
  188.     -- force updating after creating the widgets
  189.     updateBars()
  190. end
  191.  
  192. lockbar:RegisterEvent("PLAYER_ENTERING_WORLD")
  193. lockbar:RegisterEvent('UNIT_POWER')
  194. lockbar:SetScript("OnEvent",function(self,event)
  195.     if event == "PLAYER_ENTERING_WORLD" then
  196.         createBars()
  197.     else
  198.         updateBars()
  199.     end
  200. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement