Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --get the addon namespace
- local addon, ns = ...
- --get the config values
- local cfg = ns.cfg
- -- get the library
- local lib = ns.lib
- if lib.getClass("player") ~= "WARLOCK" then return end
- local pp = lib.scale
- local MAX_POWER_PER_EMBER = 10
- local SPELL_POWER_DEMONIC_FURY = SPELL_POWER_DEMONIC_FURY
- local SPELL_POWER_BURNING_EMBERS = SPELL_POWER_BURNING_EMBERS
- local SPELL_POWER_SOUL_SHARDS = SPELL_POWER_SOUL_SHARDS
- local destro = SPEC_WARLOCK_DESTRUCTION
- local affli = SPEC_WARLOCK_AFFLICTION
- local demo = SPEC_WARLOCK_DEMONOLOGY
- local shardc = {139/255, 51/255, 188/255}
- local emberc = {189/255, 71/255, 58/255}
- local furyc = {119/255, 238/255, 28/255}
- local shards = {}
- local embers = {}
- local demofury
- local shardnum, embernum
- -- container for the magic
- local lockbar = CreateFrame("Frame", nil, ColdPlayer)
- -- containers for the widgets
- local shardbar = CreateFrame("Frame", "ColdShardbar", lockbar)
- shardbar:SetSize(95,12)
- shardbar:SetFrameLevel(6)
- shardbar:SetPoint("BOTTOMRIGHT", ColdPlayer.Health, "BOTTOMRIGHT", 5, 1)
- local emberbar = CreateFrame("Frame", "ColdEmberbar", lockbar)
- emberbar:SetSize(200, 8)
- emberbar:SetFrameLevel(2)
- emberbar:SetPoint("BOTTOM", ColdPlayer, "TOP", 0, 7)
- local furybar = CreateFrame("Frame", "ColdFurybar", lockbar)
- furybar:SetSize(200, 8)
- furybar:SetFrameLevel(2)
- furybar:SetPoint("BOTTOM", ColdPlayer, "TOP", 0, 7)
- local function juggleBars(spec)
- if spec then
- if spec ~= affli then
- if spec == destro then
- emberbar:Show()
- shardbar:Hide()
- furybar:Hide()
- else
- emberbar:Hide()
- shardbar:Hide()
- furybar:Show()
- end
- else
- emberbar:Hide()
- shardbar:Show()
- furybar:Hide()
- end
- else
- emberbar:Hide()
- shardbar:Hide()
- furybar:Hide()
- end
- end
- local function updateBars()
- local spec = GetSpecialization()
- -- show the correct bar, hide the unnecessary ones
- juggleBars(spec)
- if spec then
- if spec == affli then
- local numShards = UnitPower("player", SPELL_POWER_SOUL_SHARDS)
- local maxShards = UnitPowerMax("player", SPELL_POWER_SOUL_SHARDS)
- --check for affli glyph
- if shardnum ~= maxShards then
- for i = 3, 1, -1 do
- if i == 3 then shards[i]:SetPoint("RIGHT", shardbar)
- else shards[i]:SetPoint("RIGHT", shards[i+1], "LEFT") end
- end
- else
- for i = 4, 1, -1 do
- if i == 4 then shards[i]:SetPoint("RIGHT", shardbar)
- else shards[i]:SetPoint("RIGHT", shards[i+1], "LEFT") end
- end
- end
- for i = 1, maxShards do
- if i <= numShards then
- shards[i]:SetTextColor(unpack(shardc))
- else
- shards[i]:SetTextColor(.9,.7,.9)
- end
- end
- shardnum = maxShards
- elseif spec == destro then
- local power = UnitPower("player", SPELL_POWER_BURNING_EMBERS, true)
- local maxPower = UnitPowerMax("player", SPELL_POWER_BURNING_EMBERS, true)
- local numEmbers = power / MAX_POWER_PER_EMBER
- local numBars = floor(maxPower / MAX_POWER_PER_EMBER)
- --check for destro glyph
- if embernum ~= numBars then
- for i = 1, 3 do
- embers[i]:SetSize(pp(64),pp(8))
- end
- embers[4]:Hide()
- else
- for i = 1, 4 do
- embers[i]:SetSize(pp(46),pp(8))
- embers[i]:Show()
- end
- end
- for i = 1, numBars do
- embers[i]:SetMinMaxValues((MAX_POWER_PER_EMBER * i) - MAX_POWER_PER_EMBER, MAX_POWER_PER_EMBER * i)
- embers[i]:SetValue(power)
- end
- embernum = numBars
- elseif spec == demo then
- local power = UnitPower("player", SPELL_POWER_DEMONIC_FURY)
- local maxPower = UnitPowerMax("player", SPELL_POWER_DEMONIC_FURY)
- demofury:SetMinMaxValues(0, maxPower)
- demofury:SetValue(power)
- end
- end
- end
- local function createBars()
- for i = 1,4 do
- embers[i] = CreateFrame("StatusBar", "ColdEmber"..i, emberbar)
- embers[i]:SetStatusBarTexture(cfg.tex)
- embers[i]:SetStatusBarColor(unpack(emberc))
- if i == 1 then
- embers[i]:SetPoint("LEFT", emberbar)
- else
- embers[i]:SetPoint("LEFT", embers[i-1], "RIGHT", pp(4), 0)
- end
- local shadow = CreateFrame("Frame", nil, embers[i])
- shadow:SetBackdrop(backdrop)
- shadow:SetBackdropColor(.2,.2,.2,.6)
- shadow:SetBackdropBorderColor(0,0,0)
- shadow:SetPoint('TOPLEFT', -1, 1)
- shadow:SetPoint('BOTTOMRIGHT', 1, -1)
- shadow:SetFrameLevel(1)
- embers[i].sh = shadow
- end
- embernum = 4
- for i = 4, 1, -1 do
- shards[i] = lib.SetFontString(shardbar, cfg.font, cfg.fontsize, "OUTLINE, MONOCHROME")
- shards[i]:SetText"Sh"
- shards[i]:SetSize(20,12)
- if i == 4 then
- shards[i]:SetPoint("RIGHT", shardbar)
- else
- shards[i]:SetPoint("RIGHT", shards[i+1], "LEFT")
- end
- end
- shardnum = 4
- demofury = CreateFrame("StatusBar", "ColdDemoFury", furybar)
- demofury:SetSize(200,8)
- demofury:SetPoint"CENTER"
- demofury:SetStatusBarTexture(cfg.tex)
- demofury:SetStatusBarColor(unpack(furyc))
- local shadowf = CreateFrame("Frame", nil, demofury)
- shadowf:SetBackdrop(backdrop)
- shadowf:SetBackdropColor(.2,.2,.2,.6)
- shadowf:SetBackdropBorderColor(0,0,0)
- shadowf:SetPoint('TOPLEFT', -1, 1)
- shadowf:SetPoint('BOTTOMRIGHT', 1, -1)
- shadowf:SetFrameLevel(1)
- demofury.sh = shadowf
- -- force updating after creating the widgets
- updateBars()
- end
- lockbar:RegisterEvent("PLAYER_ENTERING_WORLD")
- lockbar:RegisterEvent('UNIT_POWER')
- lockbar:SetScript("OnEvent",function(self,event)
- if event == "PLAYER_ENTERING_WORLD" then
- createBars()
- else
- updateBars()
- end
- end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement