vanilla-wow-addons – Rev 1
?pathlinks?
-- ArcaneBar
-- Adds a second casting bar to the player frame.
--
-- By: Zlixar
--
-- Adds a second casting bar to the player frame.
--
-- Modified by Nymbia for Nymbia's Perl Unitframes
-----------------------------
-- Configuration Functions --
-----------------------------
-- Registers frame to spellcast events.
local XPerl_ArcaneBar_Colors = {
main = {r = 1.0, g = 0.7, b = 0.0},
channel = {r = 0.0, g = 1.0, b = 0.0},
success = {r = 0.0, g = 1.0, b = 0.0},
failure = {r = 1.0, g = 0.0, b = 0.0}
}
local events = {"SPELLCAST_START", "SPELLCAST_STOP", "SPELLCAST_FAILED", "SPELLCAST_INTERRUPTED",
"SPELLCAST_DELAYED", "SPELLCAST_CHANNEL_START", "SPELLCAST_CHANNEL_UPDATE"}
function XPerl_ArcaneBar_Register(frame)
for i,event in pairs(events) do
frame:RegisterEvent(event)
end
frame:SetScript("OnUpdate", XPerl_ArcaneBar_OnUpdate)
end
-- Unregisters from spellcast events.
function XPerl_ArcaneBar_Unregister(frame)
for i,event in pairs(events) do
frame:UnregisterEvent(event)
end
frame:SetScript("OnUpdate", nil)
end
-- XPerl_ArcaneBar_EnableToggle
function XPerl_ArcaneBar_EnableToggle(value)
if (value == 1) then
if (XPerl_ArcaneBarFrame.Enabled ~= 1) then
XPerl_ArcaneBar_Register(XPerl_ArcaneBarFrame)
XPerl_ArcaneBarFrame.Enabled = 1
end
else
if (XPerl_ArcaneBarFrame.Enabled == 1) then
XPerl_ArcaneBar_Unregister(XPerl_ArcaneBarFrame)
XPerl_ArcaneBarFrame.Enabled = 0
XPerl_ArcaneBarFrame:Hide()
end
end
end
-- XPerl_ArcaneBar_OverrideToggle
function XPerl_ArcaneBar_OverrideToggle(value)
if (value == 1) then
if (XPerl_ArcaneBarFrame.Overrided ~= 1) then
XPerl_ArcaneBar_Unregister(CastingBarFrame)
XPerl_ArcaneBarFrame.Overrided = 1
end
else
if (XPerl_ArcaneBarFrame.Overrided == 1) then
XPerl_ArcaneBar_Register(CastingBarFrame)
XPerl_ArcaneBarFrame.Overrided = 0
end
end
end
--------------------------------------------------
--
-- Event/Update Handlers
--
--------------------------------------------------
-- XPerl_ArcaneBar_OnEvent
function XPerl_ArcaneBar_OnEvent()
if ( event == "SPELLCAST_START" ) then
XPerl_ArcaneBar:SetStatusBarColor(XPerl_ArcaneBar_Colors.main.r, XPerl_ArcaneBar_Colors.main.g, XPerl_ArcaneBar_Colors.main.b, XPerlConfig.Transparency)
XPerl_ArcaneBarSpark:Show()
this.startTime = GetTime()
this.maxValue = this.startTime + (arg2 / 1000)
XPerl_ArcaneBar:SetMinMaxValues(this.startTime, this.maxValue)
XPerl_ArcaneBar:SetValue(this.startTime)
this:SetAlpha(0.8)
this.holdTime = 0
this.casting = 1
this.fadeOut = nil
this:Show()
this.delaySum = 0
if XPerlConfig.CastTime==1 then XPerl_ArcaneBar_CastTime:Show(); else XPerl_ArcaneBar_CastTime:Hide(); end
this.mode = "casting"
elseif ( event == "SPELLCAST_STOP" ) then
this.delaySum = 0
this.sign = "+"
if (not this.casting) then
XPerl_ArcaneBar_CastTime:Hide()
end
if ( not this:IsVisible() ) then
this:Hide()
end
if ( this:IsShown() ) then
XPerl_ArcaneBar:SetValue(this.maxValue)
XPerl_ArcaneBar:SetStatusBarColor(XPerl_ArcaneBar_Colors.success.r, XPerl_ArcaneBar_Colors.success.g, XPerl_ArcaneBar_Colors.success.b, XPerlConfig.Transparency)
XPerl_ArcaneBarSpark:Hide()
XPerl_ArcaneBarFlash:SetAlpha(0.0)
XPerl_ArcaneBarFlash:Show()
this.casting = nil
this.flash = 1
this.fadeOut = 1
this.mode = "flash"
end
elseif ( event == "SPELLCAST_FAILED" or event == "SPELLCAST_INTERRUPTED" ) then
if ( this:IsShown() ) then
XPerl_ArcaneBar:SetValue(this.maxValue)
XPerl_ArcaneBar:SetStatusBarColor(XPerl_ArcaneBar_Colors.failure.r, XPerl_ArcaneBar_Colors.failure.g, XPerl_ArcaneBar_Colors.failure.b, XPerlConfig.Transparency)
XPerl_ArcaneBarSpark:Hide()
this.casting = nil
this.fadeOut = 1
this.holdTime = GetTime() + CASTING_BAR_HOLD_TIME
end
elseif ( event == "SPELLCAST_DELAYED" ) then
if( this:IsShown() ) then
if arg1 then
this.startTime = this.startTime + (arg1 / 1000)
this.maxValue = this.maxValue + (arg1 / 1000)
this.delaySum = this.delaySum + arg1
XPerl_ArcaneBar:SetMinMaxValues(this.startTime, this.maxValue)
end
end
elseif ( event == "SPELLCAST_CHANNEL_START" ) then
XPerl_ArcaneBar:SetStatusBarColor(XPerl_ArcaneBar_Colors.channel.r, XPerl_ArcaneBar_Colors.channel.g, XPerl_ArcaneBar_Colors.channel.b, XPerlConfig.Transparency)
XPerl_ArcaneBarSpark:Show()
this.maxValue = 1
this.startTime = GetTime()
this.endTime = this.startTime + (arg1 / 1000)
this.duration = arg1 / 1000
XPerl_ArcaneBar:SetMinMaxValues(this.startTime, this.endTime)
XPerl_ArcaneBar:SetValue(this.endTime)
this:SetAlpha(1.0)
this.holdTime = 0
this.casting = nil
this.channeling = 1
this.fadeOut = nil
this:Show()
this.delaySum = 0
if XPerlConfig.CastTime==1 then XPerl_ArcaneBar_CastTime:Show(); else XPerl_ArcaneBar_CastTime:Hide(); end
elseif ( event == "SPELLCAST_CHANNEL_UPDATE" ) then
if ( arg1 == 0 ) then
this.channeling = nil
this.delaySum = 0
XPerl_ArcaneBar_CastTime:Hide()
elseif ( this:IsShown() ) then
local origDuration = this.endTime - this.startTime
local elapsedTime = GetTime() - this.startTime
local losttime = origDuration*1000 - elapsedTime*1000 - arg1
this.delaySum = this.delaySum + losttime
this.startTime = this.endTime - origDuration
this.endTime = GetTime() + (arg1 / 1000)
XPerl_ArcaneBar:SetMinMaxValues(this.startTime, this.endTime)
end
else
this.delaySum = 0
this.sign = "+"
XPerl_ArcaneBar_CastTime:Hide()
end
end
-- XPerl_ArcaneBar_OnUpdate
function XPerl_ArcaneBar_OnUpdate()
if (not XPerl_ArcaneBar:IsShown()) then
XPerl_ArcaneBar_CastTime:Hide()
end
local current_time = this.maxValue - GetTime()
if (this.channeling) then
current_time = this.endTime - GetTime()
end
local text = string.sub(math.max(current_time,0)+0.001,1,4)
if (this.delaySum and this.delaySum ~= 0) then
local delay = string.sub(math.max(this.delaySum/1000, 0)+0.001,1,4)
if (this.channeling == 1) then
this.sign = "-"
else
this.sign = "+"
end
text = "|cffcc0000"..this.sign..delay.."|r "..text
end
XPerl_ArcaneBar_CastTime:SetText(text)
if ( this.casting ) then
local status = GetTime()
if ( status > this.maxValue ) then
status = this.maxValue
end
XPerl_ArcaneBar:SetValue(status)
XPerl_ArcaneBarFlash:Hide()
local sparkPosition = ((status - this.startTime) / (this.maxValue - this.startTime)) * 154
if ( sparkPosition < 0 ) then
sparkPosition = 0
end
XPerl_ArcaneBarSpark:SetPoint("CENTER", "XPerl_ArcaneBar", "LEFT", sparkPosition, 0)
elseif ( this.channeling ) then
local time = GetTime()
if ( time > this.endTime ) then
time = this.endTime
end
if ( time == this.endTime ) then
this.channeling = nil
this.fadeOut = 1
return
end
local barValue = this.startTime + (this.endTime - time)
XPerl_ArcaneBar:SetValue( barValue )
XPerl_ArcaneBarFlash:Hide()
local sparkPosition = ((barValue - this.startTime) / (this.endTime - this.startTime)) * 154
XPerl_ArcaneBarSpark:SetPoint("CENTER", "XPerl_ArcaneBar", "LEFT", sparkPosition, 0)
elseif ( GetTime() < this.holdTime ) then
return
elseif ( this.flash ) then
local alpha = XPerl_ArcaneBarFlash:GetAlpha() + CASTING_BAR_FLASH_STEP
if ( alpha < 1 ) then
XPerl_ArcaneBarFlash:SetAlpha(alpha)
else
this.flash = nil
end
elseif ( this.fadeOut ) then
local alpha = this:GetAlpha() - CASTING_BAR_ALPHA_STEP
if ( alpha > 0 ) then
this:SetAlpha(alpha)
else
this.fadeOut = nil
this:Hide()
end
end
end
-- XPerl_ArcaneBar_OnLoad
function XPerl_ArcaneBar_OnLoad()
XPerl_ArcaneBar:SetFrameLevel(XPerl_Player_NameFrame:GetFrameLevel() + 1)
--XPerl_Player_Name:SetFrameLevel(XPerl_Player_NameFrame:GetFrameLevel() + 2)
XPerl_ArcaneBarFlashTex:SetTexture("Interface\\AddOns\\XPerl\\Images\\XPerl_ArcaneBarFlash")
XPerl_ArcaneBarTex:SetTexture("Interface\\AddOns\\XPerl\\Images\\XPerl_StatusBar")
this.casting = nil
this.holdTime = 0
this.Enabled = 0
this.Overrided = 0
end
-- XPerl_ArcaneBar_Set
function XPerl_ArcaneBar_Set()
if (XPerl_ArcaneBarFrame) then
if (XPerlConfig.ArcaneBar == 0) then
XPerl_ArcaneBar_EnableToggle(0)
else
XPerl_ArcaneBar_EnableToggle(1)
end
if (XPerlConfig.OldCastBar == 0) then
XPerl_ArcaneBar_OverrideToggle(1)
else
XPerl_ArcaneBar_OverrideToggle(0)
end
end
end