Quantcast
local T, C, L = unpack(Tukui) -- Import: T - functions, constants, variables; C - config; L - locales
if C.classbar.eclipseBar[1] ~= true or T.myclass ~= "DRUID" then return end

local tbWidth, tbHeight = C.classbar.eclipseBar[2], C.classbar.eclipseBar[3]

local SPELL_POWER_ECLIPSE = SPELL_POWER_ECLIPSE
local MOONKIN_FORM = MOONKIN_FORM

local mover = CreateFrame("Frame", "TukuiEclipseMover", UIParent)
mover:Width(tbWidth+4)
mover:Height(tbHeight+4)
mover:Point("TOP", UIParent, "CENTER", 0, -150)
mover:SetTemplate("Thick")
mover:SetBackdropBorderColor(1,0,0)
mover:SetClampedToScreen(true)
mover:SetMovable(true)
mover:SetFrameStrata("HIGH")
mover:AddText("text", "Move Eclipse Bar", "CENTER")
mover:Hide()
tinsert(T.AllowFrameMoving, mover)

local eBar = CreateFrame("Frame", "TukuiEclipseBar", UIParent)
eBar:Width(tbWidth)
eBar:Height(tbHeight)
eBar:Point("CENTER", mover)
eBar:CreateBackdrop("Transparent")
eBar.backdrop:ThickBorder()

eBar.lunar = CreateFrame("StatusBar", "TukuiEclipseBar_LunarBar", eBar)
eBar.lunar:SetPoint('LEFT', eBar, 'LEFT', 0, 0)
eBar.lunar:SetSize(eBar:GetWidth(), eBar:GetHeight())
eBar.lunar:SetStatusBarTexture(C.media.normTex)
eBar.lunar:SetStatusBarColor(.50, .52, .70)

eBar.solar = CreateFrame('StatusBar', "TukuiEclipseBar_SolarBar", eBar)
eBar.solar:SetPoint('LEFT', eBar.lunar:GetStatusBarTexture(), 'RIGHT', 0, 0)
eBar.solar:SetSize(eBar:GetWidth(), eBar:GetHeight())
eBar.solar:SetStatusBarTexture(C.media.normTex)
eBar.solar:SetStatusBarColor(.80, .82,  .60)

eBar.tframe = CreateFrame("Frame", nil, eBar)
eBar.tframe:SetAllPoints(eBar)
eBar.tframe:SetFrameLevel(eBar:GetFrameLevel()+2)

eBar.tframe:FontString("text", unpack(C.pFont))
eBar.tframe.text:SetPoint("TOPLEFT", eBar.tframe, 0, 0)
eBar.tframe.text:SetPoint("BOTTOMRIGHT", eBar.tframe, 0, 2)
eBar.tframe.text:SetJustifyH("CENTER")
eBar.tframe.text:SetJustifyV("CENTER")

local updateBar = function(self, event, unit, powerType)
	if (event ~= "PLAYER_ENTERING_WORLD") and (unit ~= "player" or powerType ~= 'ECLIPSE') then return end

	local power = UnitPower('player', SPELL_POWER_ECLIPSE)
	local maxPower = UnitPowerMax('player', SPELL_POWER_ECLIPSE)
	self.lunar:SetMinMaxValues(-maxPower, maxPower)
	self.lunar:SetValue(power)
	self.solar:SetMinMaxValues(-maxPower, maxPower)
	self.solar:SetValue(-power)

	--taken from functions.lua
	local dir = GetEclipseDirection()
	if dir == "sun" then
		self.tframe.text:SetText("|cffE5994C"..L.unitframes_ouf_starfirespell.."|r")
	elseif dir == "moon" then
		self.tframe.text:SetText("|cff4478BC"..L.unitframes_ouf_wrathspell.."|r")
	else
		self.tframe.text:SetText("")
	end
end

local function toggleBar(self, event)
	local form = GetShapeshiftFormID()
	if form and (form == MOONKIN_FORM) then
		self:Show()
	else
		self:Hide()
	end
	if event == "PLAYER_ENTERING_WORLD" then
		self:UnregisterEvent("PLAYER_ENTERING_WORLD")
	end
end

local function OnEvent(self, event, ...)
	if event == "PLAYER_ENTERING_WORLD" then
		toggleBar(self, event)
		updateBar(self, event, ...)
	elseif event == "UPDATE_SHAPESHIFT_FORM" then
		toggleBar(self, event)
	elseif event == "UNIT_POWER" then
		updateBar(self, event, ...)
	end
end

eBar:RegisterEvent('ECLIPSE_DIRECTION_CHANGE', ECLIPSE_DIRECTION_CHANGE)
eBar:RegisterEvent('UNIT_AURA', UNIT_AURA)
eBar:RegisterEvent('UNIT_POWER')
eBar:RegisterEvent('UPDATE_SHAPESHIFT_FORM')
eBar:RegisterEvent('PLAYER_ENTERING_WORLD')
eBar:SetScript("OnEvent", OnEvent)

local vehicle = CreateFrame("Frame")
vehicle:RegisterEvent("VEHICLE_UPDATE")
vehicle:SetScript("OnEvent", function()
	if UnitHasVehicleUI("player") then
		eBar:Hide()
	else
		eBar:Show()
	end
end)