vanilla-wow-addons – Rev 1
?pathlinks?
-- Bindings
BINDING_HEADER_ECASTINGBAR = "eCastingBar"
BINDING_NAME_ECASTINGBARDLG = "Toggle Configuration Window";
ECASTINGBAR_TITLE = "Configure eCastingBar"
-- Global constants
CASTING_BAR_MAJOR_VERSION = "1";
CASTING_BAR_MINOR_VERSION = "3";
CASTING_BAR_REVISION = "24";
CASTING_BAR_ALPHA_STEP = 0.05;
CASTING_BAR_FLASH_STEP = 0.2;
CASTING_BAR_HOLD_TIME = 1;
CASTING_BAR_WIDTH = 264;
CASTING_BAR_HEIGHT = 30;
CASTING_BAR_SLIDER_WIDTH_MIN = 100;
CASTING_BAR_SLIDER_WIDTH_MAX = 2000;
CASTING_BAR_SLIDER_HEIGHT_MIN = 20;
CASTING_BAR_SLIDER_HEIGHT_MAX = 60;
CASTING_BAR_DEFAULT_SPELL_LENGTH = -1 -- show all
CASTING_BAR_DEFAULT_SPELL_JUSTIFY = "Center"
-- Global variables
eCastingBar_Saved = {};
eCastingBar_Player = nil;
eCastingBar_Resolution = nil;
eCastingBar_ResolutionWidth = 0;
eCastingBar_ResolutionHeight = 0;
eCastingBar_MENU_SAVEDSETTINGS = nil;
eCastingBar_SETTINGS_INDEX = "";
-- Local Constants
local CASTING_BAR_DEFAULT_TEXTURE = "Interface\\TargetingFrame\\UI-StatusBar";
local CASTING_BAR_PERL_TEXTURE = "Interface\\AddOns\\eCastingBar\\Textures\\StatusBar.tga";
local CASTING_BAR_COLOR_TEXTURE = "Interface\\AddOns\\eCastingBar\\Textures\\RoundedLightSample.tga";
local CASTING_BAR_BACKGROUND_FILE = "Interface\\Tooltips\\UI-Tooltip-Background";
local CASTING_BAR_EDGE_FILE = "Interface\\Tooltips\\UI-Tooltip-Border";
local eCastingBar_SlotUsed = -1;
-- Casting Bar Frame Suffixes
local frameSuffixes = { "" }
local CASTING_BAR_DEFAULTS = {
["Locked"] = 0,
["Enabled"] = 1,
["UsePerlTexture"] = 1,
["ShowTime"] = 1,
["HideBorder"] = 0,
["ShowDelay"] = 1,
["ShowSpellRank"] = 0,
["UseFriendlyEnemy"] = 0,
["Width"] = CASTING_BAR_WIDTH,
["Height"] = CASTING_BAR_HEIGHT,
["Left"] = 300,
["Bottom"] = 300,
["SpellLength"] = CASTING_BAR_DEFAULT_SPELL_LENGTH,
["SpellJustify"] = CASTING_BAR_DEFAULT_SPELL_JUSTIFY,
["FontSize"] = 12,
["MirrorLocked"] = 0,
["MirrorEnabled"] = 1,
["MirrorUsePerlTexture"] = 1,
["MirrorShowTime"] = 1,
["MirrorHideBorder"] = 0,
["MirrorWidth"] = CASTING_BAR_WIDTH,
["MirrorHeight"] = CASTING_BAR_HEIGHT,
["MirrorLeft"] = 300,
["MirrorBottom"] = 400,
["MirrorSpellLength"] = CASTING_BAR_DEFAULT_SPELL_LENGTH,
["MirrorSpellJustify"] = CASTING_BAR_DEFAULT_SPELL_JUSTIFY,
["MirrorFontSize"] = 12
}
local CASTING_BAR_DEFAULT_COLORS = {
["SpellColor"] = {1.0, 0.7, 0.0, 1},
["ChannelColor"] = {0.3, 0.3, 1.0, 1},
["SuccessColor"] = {0.0, 1.0, 0.0, 1},
["FailedColor"] = {1.0, 0.0, 0.0, 1},
["FlashBorderColor"] = {1.0, 0.88, 0.25, 1},
["FeignDeathColor"] = {1.0, 0.7, 0.0, 1},
["ExhaustionColor"] = {1.0, 0.9, 0.0, 1},
["BreathColor"] = {0.0, 0.5, 1.0, 1},
["TimeColor"] = {1.0, 1.0, 1.0, 1},
["DelayColor"] = {1.0, 0.0, 0.0, 1},
["MirrorTimeColor"] = {1.0, 1.0, 1.0, 1},
["MirrorFlashBorderColor"] = {1.0, 0.88, 0.25, 1},
["FriendColor"] = {0.0, 0.0, 1.0, 1},
["EnemyColor"] = {1.0, 0.0, 0.0, 1}
}
-- local variables
local eCastingBar__FlashBorders = {
"TOPLEFT",
"TOP",
"TOPRIGHT",
"LEFT",
"RIGHT",
"BOTTOMLEFT",
"BOTTOM",
"BOTTOMRIGHT"
}
local eCastingBar__Events = {
"SPELLCAST_START",
"SPELLCAST_STOP",
"SPELLCAST_INTERRUPTED",
"SPELLCAST_FAILED",
"SPELLCAST_DELAYED",
"SPELLCAST_CHANNEL_START",
"SPELLCAST_CHANNEL_UPDATE",
"SPELLCAST_CHANNEL_STOP",
"MIRROR_TIMER_START"
}
local eCastingBar__CastTimeEvents = {
"SPELLCAST_START",
"SPELLCAST_STOP",
"SPELLCAST_INTERRUPTED",
"SPELLCAST_FAILED"
}
-- FlightMap vars
local eCB_FM_TakeTaxiNode = function() end;
function ECB_addChat(msg)
DEFAULT_CHAT_FRAME:AddMessage(CASTINGBAR_HEADER.." "..msg)
end
function eCastingBar_Toggle()
if eCastingBarConfigFrame:IsVisible() then
eCastingBarConfigFrame:Hide()
else
eCastingBarConfigFrame:Show()
end
end
--[[ onFoo stuff ]]--
function eCastingBar_OnLoad()
-- load the new castingbar:
eCastingBar:RegisterEvent("PLAYER_ENTERING_WORLD")
eCastingBar:RegisterEvent("VARIABLES_LOADED")
-- replace use action function
--ECB_orig_UseAction = UseAction;
--UseAction = eCastingBar_UseAction;
end
--[[
This function will check for the Flight Map Addon
If found, we will overwrite their OnEnter function with ours.
]]--
function eCastingBar_CheckFlightMapAddon()
if (FlightMapFrame) then
-- store the FlightPath TaxiNodeOnButtonEnter function
eCB_FM_TakeTaxiNode = TakeTaxiNode
-- hook our function up
TakeTaxiNode = eCastingBar_TakeTaxiNode;
end
end
function eCastingBar_TakeTaxiNode(id)
-- first call the Flight Maps TakeTaxiNode
eCB_FM_TakeTaxiNode(id)
eCastingBar_SetTaxiInfo()
end
function eCastingBar_SetTaxiInfo()
-- now we will use the values for the taxi node for the casting bar
if (FlightMapTimesFrame) then
if (FlightMapTimesFrame:IsVisible()) then
if (eCastingBar_Saved[eCastingBar_Player].Enabled == 1) then
-- grab all the values for this casting bar
local intDuration = nil
if (FlightMapTimesFrame.endTime ~= nil) then
intDuration = (FlightMapTimesFrame.endTime - FlightMapTimesFrame.startTime) * 1000
end
eCastingBar.OnTaxi = true;
eCastingBar_SpellcastChannelStart( "", intDuration , FlightMapTimesFrame.endPoint )
-- store the flight map position
eCastingBar_Saved[eCastingBar_Player].FlightMapX = FlightMapTimesFrame:GetLeft()
eCastingBar_Saved[eCastingBar_Player].FlightMapY = FlightMapTimesFrame:GetBottom()
-- now move the frame off the screen
FlightMapTimesFrame:ClearAllPoints()
FlightMapTimesFrame:SetPoint("BOTTOMLEFT", "UIParent", "BOTTOMLEFT", -2000, 2000 )
end
end
end
end
--[[ Registers "frame" (passed as a string) to spellcast events. ]]--
function eCastingBar_Register( frmFrame, strEvent )
-- register event.
getglobal( frmFrame ):RegisterEvent( strEvent )
end
--[[ Unregisters "frame" (passed as a string) from spellcast events. ]]--
function eCastingBar_Unregister( frmFrame, strEvent )
-- ungregister event.
getglobal( frmFrame ):UnregisterEvent( strEvent )
end
--[[ Handles all the mods' events. ]]--
function eCastingBar_OnEvent( frame )
if event == "PLAYER_ENTERING_WORLD" then
-- inform the user we are starting loading .
ECB_addChat( CASTINGBAR_LOADED )
eCastingBar:UnregisterEvent( event )
eCastingBar_Player = UnitName( "player" ).. " - " ..GetRealmName( )
-- hide all bars
for index, option in frameSuffixes do
getglobal("eCastingBar"..option):Hide();
end
--is the save empty or broken?
if not eCastingBar_Saved[eCastingBar_Player] or eCastingBar_Saved[eCastingBar_Player] == 1 then
eCastingBar_Saved[eCastingBar_Player] = {}
--yes, inform the user we are loaing defaults
ECB_addChat( " First Load or broken save, Loading defaults." )
--set it to defaults
eCastingBar_ResetSettings()
end
eCastingBar_CheckSettings()
eCastingBar_LoadVariables()
-- check for FlightMap Addon
eCastingBar_CheckFlightMapAddon()
end
--if( event == "VARIABLES_LOADED" ) then
-- load the variables
--end
if( event == "SPELLCAST_START" ) then
-- arg1 = Spell Name
-- arg2 = Duration (in milliseconds)
eCastingBar_SpellcastStart( frame, arg1, arg2 )
elseif( event == "SPELLCAST_STOP" ) then
eCastingBar_SpellcastStop( frame )
elseif( event == "SPELLCAST_FAILED" or event == "SPELLCAST_INTERRUPTED" ) then
eCastingBar_SpellcastFailed( frame )
elseif( event == "SPELLCAST_DELAYED" ) then
-- arg1 = Disruption Time(in milliseconds)
eCastingBar_SpellcastDelayed( frame, arg1 )
elseif( event == "SPELLCAST_CHANNEL_START" ) then
-- arg1 = Duration (in milliseconds)
-- arg2 = Spell Name
eCastingBar_SpellcastChannelStart( frame, arg1, arg2 )
elseif( event == "SPELLCAST_CHANNEL_UPDATE" ) then
-- won't fire now
-- arg1 = Remaining Duration (in milliseconds)
eCastingBar_SpellcastChannelUpdate( frame, arg1 )
elseif ( event == "SPELLCAST_CHANNEL_STOP" ) then
eCastingBar_SpellcastChannelStop( frame )
end
-- check for mirros
if( event == "MIRROR_TIMER_START" ) then
if (eCastingBar_Saved[eCastingBar_Player].MirrorEnabled == 1) then
-- if we are not using Blizzards timers we should hide it.
if (eCastingBar_Saved[eCastingBar_Player].MirrorEnabled == 1) then
hideBlizzardMirrorFrame(arg1)
else
-- else make sure its shown
showBlizzardMirrorFrame(arg1)
end
eCastingBarMirror_Show(arg1, arg2, arg3, arg4, arg5, arg6)
end
end
end
function hideBlizzardMirrorFrame(timer)
-- hide the Blizzard frame
for index = 1, MIRRORTIMER_NUMTIMERS, 1 do
local frame = getglobal("MirrorTimer"..index)
if (frame.timer == timer) then
frame:Hide()
end
end
end
function showBlizzardMirrorFrame(timer)
-- hide the Blizzard frame
for index = 1, MIRRORTIMER_NUMTIMERS, 1 do
local frame = getglobal("MirrorTimer"..index)
if (frame.timer == timer) then
frame:Show()
end
end
end
function hideAllBlizzardMirrorFrames()
-- hide the Blizzard frame
for index = 1, MIRRORTIMER_NUMTIMERS, 1 do
local frame = getglobal("MirrorTimer"..index)
local frame2 = getglobal("eCastingBarMirror"..index)
if (frame2.timer ~= nil) then
frame:Hide()
frame2:Show()
end
end
end
function showAllBlizzardMirrorFrames()
-- hide the Blizzard frame
for index = 1, MIRRORTIMER_NUMTIMERS, 1 do
local frame = getglobal("MirrorTimer"..index)
local frame2 = getglobal("eCastingBarMirror"..index)
if (frame.timer ~= nil) then
frame:Show()
frame2:Hide()
end
end
end
function eCastingBar_ResetSettings()
ECB_addChat("Resetting Default Settings")
eCastingBar_Saved[eCastingBar_Player] = {}
-- Reset General Options
for option in CASTING_BAR_DEFAULTS do
eCastingBar_Saved[eCastingBar_Player][option] = CASTING_BAR_DEFAULTS[option]
end
-- Reset Colors
for color in CASTING_BAR_DEFAULT_COLORS do
eCastingBar_Saved[eCastingBar_Player][color] = CASTING_BAR_DEFAULT_COLORS[color]
end
setup()
end
function eCastingBar_CheckSettings()
-- Reset General Options
for option in CASTING_BAR_DEFAULTS do
if (eCastingBar_Saved[eCastingBar_Player][option] == nil) then
eCastingBar_Saved[eCastingBar_Player][option] = CASTING_BAR_DEFAULTS[option]
end
end
-- check for nil colors
for color in CASTING_BAR_DEFAULT_COLORS do
if (eCastingBar_Saved[eCastingBar_Player][color] == nil) then
eCastingBar_Saved[eCastingBar_Player][color] = CASTING_BAR_DEFAULT_COLORS[color]
end
end
end
function setup()
eCastingBar_checkEnabled()
eCastingBar_checkLocked()
eCastingBar_checkBorders()
eCastingBar_checkTimeColors( )
eCastingBar_setDelayColor()
eCastingBar_SetSize()
eCastingBar_checkFlashBorderColors()
eCastingBar_checkTextures()
end
--[[ Iniitialization ]]--
function eCastingBar_LoadVariables( )
setup()
eCastingBar_SetSavedSettingsMenu()
-- set the loaded variables
-- make the casting bar link to the movable button
eCastingBar:SetPoint("TOPLEFT", "eCastingBar_Outline", "TOPLEFT", 0, 0 )
-- make the mirror casting bar link to the movable button
eCastingBarMirror1:SetPoint("TOPLEFT", "eCastingBarMirror_Outline", "TOPLEFT", 0, 0 )
-- reset variables
for index, option in frameSuffixes do
getglobal("eCastingBar"..option).casting = nil
getglobal("eCastingBar"..option).holdTime = 0
end
-- code used if no cosmos is present
-- make the slash commands
SlashCmdList["ECASTINGBAR"] = eCastingBar_SlashHandler
SLASH_ECASTINGBAR1 = "/eCastingBar"
SLASH_ECASTINGBAR2 = "/eCB"
-- resolution
SetResolution(GetScreenResolutions())
local i,j = string.find(eCastingBar_Resolution, "x")
--eCastingBar_ResolutionWidth = tonumber(string.sub(eCastingBar_Resolution, 0, i - 1))
--eCastingBar_ResolutionHeight = tonumber(string.sub(eCastingBar_Resolution, i + 1, string.len(eCastingBar_Resolution)))
-- override these for now until I can figure out why blizzard is jacked up
eCastingBar_ResolutionWidth = 2000
eCastingBar_ResolutionHeight = 2000
setupConfigFrame()
setupDefaultConfigFrame()
setupColorsConfigFrame()
end
function setupConfigFrame()
-- set all text values --
eCastingBarGeneralsSelect:SetText(CASTINGBAR_GENERAL_BUTTON)
eCastingBarMirrorSelect:SetText(CASITINGBARMIRROR_BUTTON)
eCastingBarColorsSelect:SetText(CASTINGBAR_COLOR_BUTTON)
eDefaultsConfigButton:SetText(CASTINGBAR_DEFAULTS_BUTTON)
eCloseConfigButton:SetText(CASTINGBAR_CLOSE_BUTTON)
eCastingBarSaveSettingsButton:SetText(CASTINGBAR_SAVE_BUTTON)
eCastingBarLoadSettingsButton:SetText(CASTINGBAR_LOAD_BUTTON)
eCastingBarDeleteSettingsButton:SetText(CASTINGBAR_DELETE_BUTTON)
end
function setupDefaultConfigFrame()
-- set all text values --
for option in CASTING_BAR_BUTTONS do
local btnText = getglobal("eCastingBar"..option.."Text")
btnText:SetText(CASTING_BAR_BUTTONS[option])
end
eCastingBarSpellLength:SetNumber(eCastingBar_Saved[eCastingBar_Player].SpellLength)
eCastingBarSpellLengthText:SetText(CASTINGBAR_SPELL_LENGTH_TEXT)
eCastingBarSpellJustify_Label:SetText(CASTINGBAR_SPELL_JUSTIFY_TEXT)
eCastingBarSpellJustify_Setting:SetText(eCastingBar_Saved[eCastingBar_Player].SpellJustify)
eCastingBarText:SetJustifyH(eCastingBar_Saved[eCastingBar_Player].SpellJustify)
eCastingBarMirrorSpellLength:SetNumber(eCastingBar_Saved[eCastingBar_Player].MirrorSpellLength)
eCastingBarMirrorSpellLengthText:SetText(CASTINGBARMIRROR_SPELL_LENGTH_TEXT)
eCastingBarMirrorSpellJustify_Label:SetText(CASTINGBARMIRROR_SPELL_JUSTIFY_TEXT)
eCastingBarMirrorSpellJustify_Setting:SetText(eCastingBar_Saved[eCastingBar_Player].MirrorSpellJustify)
for index = 1, MIRRORTIMER_NUMTIMERS, 1 do
getglobal("eCastingBarMirror"..index.."StatusBarText"):SetJustifyH(eCastingBar_Saved[eCastingBar_Player].MirrorSpellJustify)
end
-- set all checks
for option in CASTING_BAR_BUTTONS do
local btn = getglobal("eCastingBar"..option)
btn:SetChecked(eCastingBar_Saved[eCastingBar_Player][option])
end
local slider, sliderText, low, high, width, height
local optionTabs = { "", "Mirror" }
for index, option in optionTabs do
-- setup the width slider
slider = getglobal("eCastingBar"..option.."WidthSlider")
sliderText = getglobal("eCastingBar"..option.."WidthSliderText")
low = getglobal("eCastingBar"..option.."WidthSliderLow")
high = getglobal("eCastingBar"..option.."WidthSliderHigh")
slider:SetMinMaxValues(CASTING_BAR_SLIDER_WIDTH_MIN, eCastingBar_ResolutionWidth)
slider:SetValueStep(1)
slider:SetValue(eCastingBar_Saved[eCastingBar_Player][option.."Width"])
sliderText:SetText(CASTINGBAR_SLIDER_WIDTH_TEXT)
low:SetText(CASTING_BAR_SLIDER_WIDTH_MIN)
high:SetText(eCastingBar_ResolutionWidth)
-- setup the height slider
slider = getglobal("eCastingBar"..option.."HeightSlider")
sliderText = getglobal("eCastingBar"..option.."HeightSliderText")
low = getglobal("eCastingBar"..option.."HeightSliderLow")
high = getglobal("eCastingBar"..option.."HeightSliderHigh")
slider:SetMinMaxValues(CASTING_BAR_SLIDER_HEIGHT_MIN, CASTING_BAR_SLIDER_HEIGHT_MAX)
slider:SetValueStep(1)
slider:SetValue(eCastingBar_Saved[eCastingBar_Player][option.."Height"])
sliderText:SetText(CASTINGBAR_SLIDER_HEIGHT_TEXT)
low:SetText(CASTING_BAR_SLIDER_HEIGHT_MIN)
high:SetText(CASTING_BAR_SLIDER_HEIGHT_MAX)
-- setup the x slider
slider = getglobal("eCastingBar"..option.."LeftSlider")
sliderText = getglobal("eCastingBar"..option.."LeftSliderText")
low = getglobal("eCastingBar"..option.."LeftSliderLow")
high = getglobal("eCastingBar"..option.."LeftSliderHigh")
if (option == "Mirror") then
width = tonumber(string.format("%.0f", getglobal("eCastingBarMirror1"):GetWidth()))
height = tonumber(string.format("%.0f", getglobal("eCastingBarMirror1"):GetHeight()))
else
width = tonumber(string.format("%.0f", getglobal("eCastingBar"..option):GetWidth()))
height = tonumber(string.format("%.0f", getglobal("eCastingBar"..option):GetHeight()))
end
slider:SetMinMaxValues(-1000, eCastingBar_ResolutionWidth)
slider:SetValueStep(1)
slider:SetValue(eCastingBar_Saved[eCastingBar_Player][option.."Left"])
sliderText:SetText(CASTINGBAR_SLIDER_LEFT_TEXT)
low:SetText(-1000)
high:SetText(eCastingBar_ResolutionWidth)
-- setup the y slider
slider = getglobal("eCastingBar"..option.."BottomSlider")
sliderText = getglobal("eCastingBar"..option.."BottomSliderText")
low = getglobal("eCastingBar"..option.."BottomSliderLow")
high = getglobal("eCastingBar"..option.."BottomSliderHigh")
slider:SetMinMaxValues(-1000, eCastingBar_ResolutionHeight)
slider:SetValueStep(1)
slider:SetValue(eCastingBar_Saved[eCastingBar_Player][option.."Bottom"])
sliderText:SetText(CASTINGBAR_SLIDER_BOTTOM_TEXT)
low:SetText(-1000)
high:SetText(eCastingBar_ResolutionHeight)
-- setup the font slider
slider = getglobal("eCastingBar"..option.."FontSlider")
sliderText = getglobal("eCastingBar"..option.."FontSliderText")
low = getglobal("eCastingBar"..option.."FontSliderLow")
high = getglobal("eCastingBar"..option.."FontSliderHigh")
slider:SetMinMaxValues(8, 40)
slider:SetValueStep(1)
slider:SetValue(eCastingBar_Saved[eCastingBar_Player][option.."FontSize"])
sliderText:SetText(CASTINGBAR_SLIDER_FONT_TEXT)
low:SetText(8)
high:SetText(40)
end
end
function setupColorsConfigFrame()
-- set the textures --
for color in CASTINGBAR_COLOR_LABEL do
local btnColor = getglobal("btn"..color.."Texture")
-- set the texture
btnColor:SetTexture(CASTING_BAR_COLOR_TEXTURE)
-- set the vertex color
btnColor:SetVertexColor(unpack(eCastingBar_Saved[eCastingBar_Player][color]))
-- set the label
getglobal("lbl"..color.."Text"):SetText(CASTINGBAR_COLOR_LABEL[color])
end
end
function SetResolution(...)
local iRes = GetCurrentResolution()
for i=1, arg.n, 1 do
if (iRes == i) then
eCastingBar_Resolution = arg[i]
end
end
end
--[[ Handles all the slash commands if cosmos isn't present. ]]--
function eCastingBar_SlashHandler( strMessage )
local command, param
-- make it it all lower case to be sure
strMessage = string.lower( strMessage )
if(index) then
command = string.sub(strMessage, 1, (index - 1))
param = string.sub(strMessage, (index + 1) )
else
command = strMessage
end
if( command == CASTINGBAR_CHAT_C1 ) then
-- show the config window
getglobal("eCastingBarConfigFrame"):Show()
-- no, did they type: help?
elseif ( command == CASTINGBAR_CHAT_C2) then
-- call for help
eCastingBar_ChatHelp()
-- no: do default
else
-- show the config window
getglobal("eCastingBarConfigFrame"):Show()
end
setupDefaultConfigFrame()
setupColorsConfigFrame()
end
--[[ Handles chat help messages. ]]--
function eCastingBar_ChatHelp( )
local intIndex = 0
local strMessage = ""
-- prints each line in CASTINGBAR_HELP = { }
for intIndex, strMessage in CASTINGBAR_HELP do
ECB_addChat( strMessage )
end
end
--[[ Replaces the UseAction function ]]--
function eCastingBar_UseAction(slot, checkCursor, onSelf)
eCastingBar_SlotUsed = slot;
return ECB_orig_UseAction(slot, checkCursor, onSelf)
end
function ECB_GetActionSpell(slot)
ECB_TooltipTextLeft1:SetText();
ECB_TooltipTextRight1:SetText();
ECB_Tooltip:SetAction(slot);
local start, stop, name, rank;
name = ECB_TooltipTextLeft1:GetText();
rank = ECB_TooltipTextRight1:GetText();
start, stop, rank = string.find((rank or ""), "(%d+)");
rank = (rank or 1) / 1.0;
return (name or ""), rank;
end
function eCastingBar_IsSpell(spell, rank)
local i = 1
rank = "Rank "..tonumber(rank);
while true do
local spellName, spellRank = GetSpellName(i, BOOKTYPE_SPELL)
if not spellName then
do break end
end
if (spell == spellName and rank == spellRank) then
return 1;
end
i = i + 1
end
return 0;
end
--[[ Handles the SPELLCAST_START event. ]]--
function eCastingBar_SpellcastStart( fraFrame, strSpellName, intDuration )
local spell = "";
local rank = "";
-- try to find the current action
for slot = 1, 200, 1 do
if (HasAction(slot) == 1 and IsCurrentAction(slot) == 1) then
spell, rank = ECB_GetActionSpell(slot);
-- go through the spellbook and see if this is an actual spell
if (eCastingBar_IsSpell(spell, rank) == 0) then
spell = "";
rank = "";
end
break;
end
end
if (eCastingBar_Saved[eCastingBar_Player].ShowSpellRank == 1) then
if (spell ~= "") then
strSpellName = spell.." (Rank "..rank..")"
end
end
-- set the bar color
-- check for friendly or enemy player
local Red, Green, Blue, Alpha
if (eCastingBar_CurrentSpell ~= "" and eCastingBar_Saved[eCastingBar_Player].UseFriendlyEnemy == 1) then
if (UnitIsFriend("player","target") and (UnitName("target") ~= UnitName("player"))) then
Red, Green, Blue, Alpha = unpack(eCastingBar_Saved[eCastingBar_Player].FriendColor)
elseif (UnitIsEnemy("player","target")) then
Red, Green, Blue, Alpha = unpack(eCastingBar_Saved[eCastingBar_Player].EnemyColor)
else
Red, Green, Blue, Alpha = unpack(eCastingBar_Saved[eCastingBar_Player].SpellColor)
end
else
Red, Green, Blue, Alpha = unpack(eCastingBar_Saved[eCastingBar_Player].SpellColor)
end
getglobal("eCastingBar"..fraFrame.."StatusBar"):SetStatusBarColor( Red, Green, Blue, Alpha )
-- show the spark
getglobal("eCastingBar"..fraFrame.."Spark"):Show( )
-- set the start and max time
getglobal("eCastingBar"..fraFrame).startTime = GetTime( )
getglobal("eCastingBar"..fraFrame).initStartTime = GetTime( )
-- if the duration is nil set it to 10 minutes. Nothing should last this long
if (intDuration == nil) then
intDuration = 600000
end
getglobal("eCastingBar"..fraFrame).maxValue = getglobal("eCastingBar"..fraFrame).startTime + ( intDuration / 1000 )
-- set the bar minium and maxium accordingly (basicly it will grow as time passes)
getglobal("eCastingBar"..fraFrame.."StatusBar"):SetMinMaxValues( getglobal("eCastingBar"..fraFrame).startTime, getglobal("eCastingBar"..fraFrame).maxValue )
-- set the bar to empty
getglobal("eCastingBar"..fraFrame.."StatusBar"):SetValue( getglobal("eCastingBar"..fraFrame).startTime )
-- set the text to the spell name
-- figure out how much to show
if ( eCastingBar_Saved[eCastingBar_Player][fraFrame.."SpellLength"] == -1 ) then
-- show all
getglobal("eCastingBar"..fraFrame.."Text"):SetText( strSpellName )
elseif ( eCastingBar_Saved[eCastingBar_Player][fraFrame.."SpellLength"] == 0) then
-- dont show it
getglobal("eCastingBar"..fraFrame.."Text"):SetText( "" )
else
-- if the size of the name is less than or equal to the max size, just show it all
if ( string.len(strSpellName) <= eCastingBar_Saved[eCastingBar_Player][fraFrame.."SpellLength"] ) then
getglobal("eCastingBar"..fraFrame.."Text"):SetText( strSpellName )
else
getglobal("eCastingBar"..fraFrame.."Text"):SetText( string.sub(strSpellName , 1, eCastingBar_Saved[eCastingBar_Player][fraFrame.."SpellLength"]) )
end
end
-- set the bar to fully opaque
getglobal("eCastingBar"..fraFrame):SetAlpha( 1.0 )
-- start the casting state, and make sure everything else is reset
getglobal("eCastingBar"..fraFrame).holdTime = 0
getglobal("eCastingBar"..fraFrame).casting = 1
getglobal("eCastingBar"..fraFrame).fadeOut = nil
getglobal("eCastingBar"..fraFrame).delay = 0
getglobal("eCastingBar"..fraFrame):Show( )
getglobal("eCastingBar"..fraFrame).mode = "casting"
end
--[[ Handles the SPELLCAST_STOP event. ]]--
function eCastingBar_SpellcastStop( fraFrame )
-- NOTE: not sure why but certain things in here keep getting called everytime channeling updates
-- first the green bar colored used for success, forced channeling green also (no matter what i did)
-- so don't put anything in here that will fuck w/ channeling, unless you use if( eCastingBar.channeling == nil)
-- test
-- make sure we aren't channeling first
if( getglobal("eCastingBar"..fraFrame).channeling == nil ) then
-- set the bar color
local Red, Green, Blue, Alpha
Red, Green, Blue, Alpha = unpack(eCastingBar_Saved[eCastingBar_Player].SuccessColor)
getglobal("eCastingBar"..fraFrame.."StatusBar"):SetStatusBarColor( Red, Green, Blue, Alpha )
getglobal("eCastingBar"..fraFrame.."Spark"):Hide( )
end
-- is the bar still visiable?
if ( not getglobal("eCastingBar"..fraFrame):IsVisible( ) ) then
-- yes, we are done casting, so hide it
getglobal("eCastingBar"..fraFrame):Hide( )
end
-- is the bar still shown? ( not sure what the difference between this and :IsVisible, but there is (figure it out!) )
if ( getglobal("eCastingBar"..fraFrame):IsShown( ) ) then
-- set the bar to max value (visually helps the user see)
getglobal("eCastingBar"..fraFrame.."StatusBar"):SetValue( getglobal("eCastingBar"..fraFrame).maxValue )
-- start the flash state
getglobal("eCastingBar"..fraFrame.."Flash"):SetAlpha( 0.0 )
getglobal("eCastingBar"..fraFrame.."Flash"):Show( )
getglobal("eCastingBar"..fraFrame).casting = nil
getglobal("eCastingBar"..fraFrame).OnTaxi = nil
getglobal("eCastingBar"..fraFrame).flying = nil
getglobal("eCastingBar"..fraFrame).delay = 0
getglobal("eCastingBar"..fraFrame).flash = 1
getglobal("eCastingBar"..fraFrame).fadeOut = 1
getglobal("eCastingBar"..fraFrame).mode = "flash"
end
end
--[[ Handles the SPELLCAST_FAILED and SPELLCAST_INTERRUPTED events. ]]--
function eCastingBar_SpellcastFailed( fraFrame )
-- first make sure we are not flying. if so, just ignore this
if (getglobal("eCastingBar"..fraFrame).flying) then return; end
-- is the bar still shown? ( not sure what the difference between this and :IsVisiable, but there is (figure it out!) )
if ( getglobal("eCastingBar"..fraFrame):IsShown( ) ) then
-- set the bar to max (visually helps the user see)
getglobal("eCastingBar"..fraFrame.."StatusBar"):SetValue( getglobal("eCastingBar"..fraFrame).maxValue )
-- set the bar color
local Red, Green, Blue, Alpha
Red, Green, Blue, Alpha = unpack(eCastingBar_Saved[eCastingBar_Player].FailedColor)
getglobal("eCastingBar"..fraFrame.."StatusBar"):SetStatusBarColor( Red, Green, Blue, Alpha )
-- hide the spark, we dont need it anymore
getglobal("eCastingBar"..fraFrame.."Spark"):Hide( )
-- was the called event: spell failed?
if ( event == "SPELLCAST_FAILED" ) then
-- yes, set the text accordingly
getglobal("eCastingBar"..fraFrame.."Text"):SetText( FAILED )
else
-- no, it must have been interupted instead, set the text accordingly
getglobal("eCastingBar"..fraFrame.."Text"):SetText( INTERRUPTED )
end
-- end the casting state, start the fadeout state
getglobal("eCastingBar"..fraFrame).casting = nil
getglobal("eCastingBar"..fraFrame).delay = 0
getglobal("eCastingBar"..fraFrame).fadeOut = 1
getglobal("eCastingBar"..fraFrame).holdTime = GetTime() + CASTING_BAR_HOLD_TIME
end
end
--[[ Handles the SPELLCAST_DELAYED event. ]]--
function eCastingBar_SpellcastDelayed( fraFrame, intDisruptionTime )
-- is the bar still shown? ( not sure what the difference between this and :IsVisiable, but there is (figure it out!) )
if( getglobal("eCastingBar"..fraFrame):IsShown( ) ) then
-- set the start and max time according to how much it was disrupted
getglobal("eCastingBar"..fraFrame).startTime = getglobal("eCastingBar"..fraFrame).startTime + ( intDisruptionTime / 1000 )
getglobal("eCastingBar"..fraFrame).maxValue = getglobal("eCastingBar"..fraFrame).maxValue + ( intDisruptionTime / 1000 )
-- set the bar accordingly (basicly stricking it according to how much it was disrupted)
getglobal("eCastingBar"..fraFrame.."StatusBar"):SetMinMaxValues( getglobal("eCastingBar"..fraFrame).startTime, getglobal("eCastingBar"..fraFrame).maxValue )
if (getglobal("eCastingBar"..fraFrame).delay == nil) then
getglobal("eCastingBar"..fraFrame).delay = 0
end
getglobal("eCastingBar"..fraFrame).delay = getglobal("eCastingBar"..fraFrame).delay + (intDisruptionTime / 1000)
end
end
--[[ Handles the SPELLCAST_CHANNEL_START event. ]]--
function eCastingBar_SpellcastChannelStart( fraFrame, intDuration, strSpellName )
local spell = "";
local rank = "";
-- try to find the current action
for slot = 1, 200, 1 do
if (HasAction(slot) == 1 and IsCurrentAction(slot) == 1) then
spell, rank = ECB_GetActionSpell(slot);
-- go through the spellbook and see if this is an actual spell
if (eCastingBar_IsSpell(spell, rank) == 0) then
spell = "";
rank = "";
end
break;
end
end
if (eCastingBar_Saved[eCastingBar_Player].ShowSpellRank == 1) then
if (spell ~= "") then
strSpellName = spell.." (Rank "..rank..")"
end
end
if (eCastingBar_CurrentSpell ~= "" and eCastingBar_Saved[eCastingBar_Player].UseFriendlyEnemy == 1) then
if (UnitIsFriend("player","target") and (UnitName("target") ~= UnitName("player"))) then
Red, Green, Blue, Alpha = unpack(eCastingBar_Saved[eCastingBar_Player].FriendColor)
elseif (UnitIsEnemy("player","target")) then
Red, Green, Blue, Alpha = unpack(eCastingBar_Saved[eCastingBar_Player].EnemyColor)
else
Red, Green, Blue, Alpha = unpack(eCastingBar_Saved[eCastingBar_Player].ChannelColor)
end
else
Red, Green, Blue, Alpha = unpack(eCastingBar_Saved[eCastingBar_Player].ChannelColor)
end
getglobal("eCastingBar"..fraFrame.."StatusBar"):SetStatusBarColor( Red, Green, Blue, Alpha )
-- show the spark
getglobal("eCastingBar"..fraFrame.."Spark"):Show( )
-- set the bar to max
getglobal("eCastingBar"..fraFrame).maxValue = 1
-- set the delay
getglobal("eCastingBar"..fraFrame).delay = 0
-- set the start and end times
getglobal("eCastingBar"..fraFrame).startTime = GetTime( )
getglobal("eCastingBar"..fraFrame).initStartTime = GetTime( )
getglobal("eCastingBar"..fraFrame).duration = intDuration / 1000
-- if the duration is nil set it to 10 minutes. Nothing should last this long
if (intDuration == nil) then
intDuration = 600000
end
getglobal("eCastingBar"..fraFrame).endTime = getglobal("eCastingBar"..fraFrame).startTime + ( intDuration / 1000 )
-- set the bar minium and maxium values
getglobal("eCastingBar"..fraFrame.."StatusBar"):SetMinMaxValues( getglobal("eCastingBar"..fraFrame).startTime, getglobal("eCastingBar"..fraFrame).endTime )
-- set the bar length visually to reflex the new time
getglobal("eCastingBar"..fraFrame.."StatusBar"):SetValue( getglobal("eCastingBar"..fraFrame).endTime )
-- set the text to the spell name
-- figure out how much to show
if ( eCastingBar_Saved[eCastingBar_Player][fraFrame.."SpellLength"] == -1 ) then
-- show all
getglobal("eCastingBar"..fraFrame.."Text"):SetText( strSpellName )
elseif ( eCastingBar_Saved[eCastingBar_Player][fraFrame.."SpellLength"] == 0) then
-- dont show it
getglobal("eCastingBar"..fraFrame.."Text"):SetText( "" )
else
-- if the size of the name is less than or equal to the max size, just show it all
if ( string.len(strSpellName) <= eCastingBar_Saved[eCastingBar_Player][fraFrame.."SpellLength"] ) then
getglobal("eCastingBar"..fraFrame.."Text"):SetText( strSpellName )
else
getglobal("eCastingBar"..fraFrame.."Text"):SetText( string.sub(strSpellName , 1, eCastingBar_Saved[eCastingBar_Player][fraFrame.."SpellLength"]) )
end
end
-- set the bar to fully opaque
getglobal("eCastingBar"..fraFrame):SetAlpha( 1.0 )
-- reset various valuses used to hide the bar, also make sure its channeling not casting
getglobal("eCastingBar"..fraFrame).holdTime = 0
getglobal("eCastingBar"..fraFrame).casting = nil
getglobal("eCastingBar"..fraFrame).channeling = 1
getglobal("eCastingBar"..fraFrame).fadeOut = nil
getglobal("eCastingBar"..fraFrame):Show( )
getglobal("eCastingBar"..fraFrame).mode = "channeling"
end
--[[ Handles the SPELLCAST_CHANNEL_UPDATE event. ]]--
-- won't fire now
function eCastingBar_SpellcastChannelUpdate( fraFrame, intRemainingDuration )
-- is the remaining time zero?
if( intRemainingDuration == 0 ) then
-- yes, we aren't channeling anymore
getglobal("eCastingBar"..fraFrame).channeling = nil
-- no, is the bar still shown? ( not sure what the difference between this and :IsVisiable, but there is (figure it out!) )
elseif( getglobal("eCastingBar"..fraFrame):IsShown( ) ) then
-- set the original duration
local intOriginalDuration = getglobal("eCastingBar"..fraFrame).endTime - getglobal("eCastingBar"..fraFrame).startTime
-- set the delay
local elapsedTime = GetTime() - getglobal("eCastingBar"..fraFrame).startTime;
local losttime = intOriginalDuration*1000 - elapsedTime*1000 - arg1;
getglobal("eCastingBar"..fraFrame).delay = getglobal("eCastingBar"..fraFrame).delay + (losttime / 1000);
-- set the start and end time
getglobal("eCastingBar"..fraFrame).endTime = GetTime( ) + ( intRemainingDuration / 1000 )
getglobal("eCastingBar"..fraFrame).startTime = getglobal("eCastingBar"..fraFrame).endTime - intOriginalDuration
-- set the bar length reflect the new state (basicly decreases the start time as time passes, thus shrinking the bar)
getglobal("eCastingBar"..fraFrame.."StatusBar"):SetMinMaxValues( getglobal("eCastingBar"..fraFrame).startTime, getglobal("eCastingBar"..fraFrame).endTime )
-- test to see visually when it fires... and it doesn't fire much.
--ECB_addChat( "SPELLCAST_CHANNELING_UPDATE" )
end
end
--[[ Handles the SPELLCAST_CHANNEL_UPDATE event. ]]--
function eCastingBar_SpellcastChannelStop( fraFrame )
getglobal("eCastingBar"..fraFrame).channeling = nil
-- set the bar to max value (visually helps the user see)
getglobal("eCastingBar"..fraFrame.."StatusBar"):SetValue( getglobal("eCastingBar"..fraFrame).maxValue )
local failed = 0;
if (getglobal("eCastingBar"..fraFrame).endTime ~= nil) then
if ( (getglobal("eCastingBar"..fraFrame).endTime - GetTime()) > 0.5 ) then
failed = 1;
eCastingBar_SpellcastFailed (fraFrame)
end
end
if (failed == 0) then
-- start the flash state
getglobal("eCastingBar"..fraFrame.."Flash"):SetAlpha( 0.0 )
getglobal("eCastingBar"..fraFrame.."Flash"):Show( )
getglobal("eCastingBar"..fraFrame).casting = nil
getglobal("eCastingBar"..fraFrame).OnTaxi = nil
getglobal("eCastingBar"..fraFrame).flying = nil
getglobal("eCastingBar"..fraFrame).delay = 0
getglobal("eCastingBar"..fraFrame).flash = 1
getglobal("eCastingBar"..fraFrame).fadeOut = 1
getglobal("eCastingBar"..fraFrame).mode = "flash"
end
end
--[[ Handles all updates. ]]--
function eCastingBar_OnUpdate( frame )
-- check if we were on a taxi.
-- Added for FlightMap support
if ( getglobal("eCastingBar"..frame).OnTaxi ) then
if (not getglobal("eCastingBar"..frame).flying) then
if UnitOnTaxi("player") then getglobal("eCastingBar"..frame).flying = true; end
return;
end
-- are we on a taxi?
-- Did we just get off?
if (not UnitOnTaxi("player")) then
getglobal("eCastingBar"..frame).flying = nil
eCastingBar_SpellcastStop( "" )
end
end
-- are we casting?
if( getglobal("eCastingBar"..frame).casting ) then
-- yes:
local intCurrentTime = GetTime()
local intSparkPosition = 0
-- update the casting time
--eCastingBar_Time:SetText( string.sub( math.max( eCastingBar.maxValue - intCurrentTime, 0.00 ), 1,4 ) )
-- Thanks to wbb at Cursed for the lovely formating
if ( eCastingBar_Saved[eCastingBar_Player][frame.."ShowTime"] == 1) then
getglobal("eCastingBar"..frame.."_Time"):SetText( string.format( "%.1f", math.max( getglobal("eCastingBar"..frame).maxValue - intCurrentTime, 0.0 ) ) )
else
getglobal("eCastingBar"..frame.."_Time"):SetText("")
end
local bDelay = false
if ( eCastingBar_Saved[eCastingBar_Player][frame.."ShowDelay"] == 1) then
if (getglobal("eCastingBar"..frame).delay ~= 0) then
bDelay = true
end
end
if (bDelay) then
getglobal("eCastingBar"..frame.."_Delay"):SetText("+"..string.format( "%.1f", eCastingBar.delay ) )
else
getglobal("eCastingBar"..frame.."_Delay"):SetText("")
end
-- is the status > than the max?
if( intCurrentTime > getglobal("eCastingBar"..frame).maxValue ) then
-- yes, set it to max (not sure how it would get that way, but again blizzard is safe)
intCurrentTime = getglobal("eCastingBar"..frame).maxValue
end
-- update the bar length
getglobal("eCastingBar"..frame.."StatusBar"):SetValue( intCurrentTime )
--reset the flash to hidden
getglobal("eCastingBar"..frame.."Flash"):Hide( )
-- updates the spark
local width = getglobal("eCastingBar"..frame.."StatusBar"):GetWidth()
intSparkPosition = ( ( intCurrentTime - getglobal("eCastingBar"..frame).startTime ) / ( getglobal("eCastingBar"..frame).maxValue - getglobal("eCastingBar"..frame).startTime ) ) * width
if( intSparkPosition < 0 ) then
intSparkPosition = 0
end
-- set the spark to the end of the current barsize
getglobal("eCastingBar"..frame.."Spark"):SetPoint( "CENTER", "eCastingBarStatusBar", "LEFT", intSparkPosition, 0 )
-- no, are we channeling?
elseif ( getglobal("eCastingBar"..frame).channeling ) then
-- yes:
local intTimeLeft = GetTime( )
local intBarValue = 0
local intSparkPosition = getglobal("eCastingBar"..frame).endTime
-- update the channeling time
--eCastingBar_Time:SetText( string.sub( math.max( eCastingBar.endTime - intTimeLeft, 0.00 ), 1 , 4 ) )
-- Thanks to wbb at Cursed for the lovely formating
if (eCastingBar_Saved[eCastingBar_Player][frame.."ShowTime"] == 1) then
-- if we are over 1 minute, do minute:seconds
local timeLeft = math.max( getglobal("eCastingBar"..frame).endTime - intTimeLeft, 0.0 )
local timeMsg = nil
local minutes = 0
local seconds = 0
if (timeLeft > 60) then
minutes = math.floor( ( timeLeft / 60 ))
local seconds = math.ceil( timeLeft - ( 60 * minutes ))
if (seconds == 60) then
minutes = minutes + 1
seconds = 0
end
timeMsg = format("%s:%s", minutes, getFormattedNumber(seconds))
else
timeMsg = string.format( "%.1f", timeLeft )
end
--format(COOLDOWNCOUNT_MINUTES_SECONDS_FORMAT, minutes, CooldownCount_GetFormattedNumber(seconds))
getglobal("eCastingBar"..frame.."_Time"):SetText( timeMsg )
else
getglobal("eCastingBar"..frame.."_Time"):SetText("")
end
local bDelay = false
if (eCastingBar_Saved[eCastingBar_Player][frame.."ShowDelay"] == 1) then
if (getglobal("eCastingBar"..frame).delay ~= 0) then
bDelay = true
end
end
if (bDelay) then
getglobal("eCastingBar"..frame.."_Delay"):SetText("-"..string.format( "%.1f", eCastingBar.delay ) )
else
getglobal("eCastingBar"..frame.."_Delay"):SetText("")
end
-- is the time left greater than channeling end time?
if( intTimeLeft > getglobal("eCastingBar"..frame).endTime ) then
-- yes, set it to the channeling end time (this will happen if you get delayed longer than the time left on channeling)
intTimeLeft = getglobal("eCastingBar"..frame).endTime
end
-- are the times equal?
if( intTimeLeft == getglobal("eCastingBar"..frame).endTime ) then
-- yes, we finished channeling, so start the fadeout process and exit
getglobal("eCastingBar"..frame).channeling = nil
getglobal("eCastingBar"..frame).fadeOut = 1
return
end
-- update the bar length
intBarValue = getglobal("eCastingBar"..frame).startTime + ( getglobal("eCastingBar"..frame).endTime - intTimeLeft )
getglobal("eCastingBar"..frame.."StatusBar"):SetValue( intBarValue )
--reset the flash to hidden
getglobal("eCastingBar"..frame.."Flash"):Hide( )
-- updates the spark
local width = getglobal("eCastingBar"..frame.."Background"):GetWidth()
intSparkPosition = ( ( intBarValue - getglobal("eCastingBar"..frame).startTime ) / ( getglobal("eCastingBar"..frame).endTime - getglobal("eCastingBar"..frame).startTime ) ) * width
getglobal("eCastingBar"..frame.."Spark"):SetPoint( "CENTER", "eCastingBar"..frame.."StatusBar", "LEFT", intSparkPosition, 0 )
-- no, is the current time < the hold time?
elseif( GetTime( ) < getglobal("eCastingBar"..frame).holdTime ) then
-- yes, exit, we aren't doing anything
return
-- no, are we in flash mode?
elseif( getglobal("eCastingBar"..frame).flash ) then
-- yes, sest the flash alpha
local intAlpha = getglobal("eCastingBar"..frame.."Flash"):GetAlpha( ) + CASTING_BAR_FLASH_STEP
-- reset the text
getglobal("eCastingBar"..frame.."_Time"):SetText( "" )
-- is the flash alpha < 1?
if( intAlpha < 1 ) then
-- yes, step it up
getglobal("eCastingBar"..frame.."Flash"):SetAlpha( intAlpha )
else
-- no, which means its 1 or greater, and we are at full alpha and done.
getglobal("eCastingBar"..frame).flash = nil
end
-- no, are we fading out now?
elseif ( getglobal("eCastingBar"..frame).fadeOut ) then
--yes, set the CastingBar alpha
local intAlpha = getglobal("eCastingBar"..frame):GetAlpha( ) - CASTING_BAR_ALPHA_STEP
-- is the bar alpha > 0?
if( intAlpha > 0 ) then
-- step it down
getglobal("eCastingBar"..frame):SetAlpha( intAlpha )
else
-- no, which means its 0 or larger, and we are at fully transparent so we are done and hide the bar.
getglobal("eCastingBar"..frame).fadeOut = nil
getglobal("eCastingBar"..frame):Hide( )
end
end
end
function getFormattedNumber(number)
if (strlen(number) < 2 ) then
return "0"..number
else
return number
end
end
--[[ Starts moving the frame. ]]--
function eCastingBar_MouseUp( strButton, frmFrame, frameType )
if( eCastingBar_Saved[eCastingBar_Player][frameType.."Locked"] == 0 ) then
getglobal( frmFrame ):StopMovingOrSizing( )
eCastingBar_Saved[eCastingBar_Player][frameType.."Left"] = getglobal(frmFrame):GetLeft()
eCastingBar_Saved[eCastingBar_Player][frameType.."Bottom"] = getglobal(frmFrame):GetBottom()
getglobal("eCastingBar"..frameType.."LeftSlider"):SetValue(eCastingBar_Saved[eCastingBar_Player][frameType.."Left"])
getglobal("eCastingBar"..frameType.."BottomSlider"):SetValue(eCastingBar_Saved[eCastingBar_Player][frameType.."Bottom"])
end
end
--[[ Stops moving the frame. ]]--
function eCastingBar_MouseDown( strButton, frmFrame, frameType )
if( strButton == "LeftButton" and (eCastingBar_Saved[eCastingBar_Player][frameType.."Locked"] == 0 ) ) then
getglobal( frmFrame ):StartMoving( )
end
end
function eCastingBarGeneral_MouseUp( strButton, frmFrame )
getglobal( frmFrame ):StopMovingOrSizing( )
end
--[[ Stops moving the frame. ]]--
function eCastingBarGeneral_MouseDown( strButton, frmFrame, frameType )
if( strButton == "LeftButton") then
getglobal( frmFrame ):StartMoving( )
end
end
function eCastingBar_getShowDelay()
return eCastingBar_Saved[eCastingBar_Player].ShowDelay
end
function eCastingBar_setShowDelay( intShowDelay )
eCastingBar_Saved[eCastingBar_Player].ShowDelay = intShowDelay
end
function eCastingBar_checkBorders()
for index, option in frameSuffixes do
if (eCastingBar_Saved[eCastingBar_Player][option.."HideBorder"] == 1) then
getglobal("eCastingBar"..option):SetBackdrop(nil)
else
getglobal("eCastingBar"..option):SetBackdrop({bgFile = CASTING_BAR_BACKGROUND_FILE, edgeFile = CASTING_BAR_EDGE_FILE, tile = true, tileSize = 16, edgeSize = 16, insets = { left = 5, right = 5, top = 5, bottom = 5 }})
getglobal("eCastingBar"..option):SetBackdropColor(0,0,0,0.5)
end
end
for index = 1, MIRRORTIMER_NUMTIMERS, 1 do
if (eCastingBar_Saved[eCastingBar_Player].MirrorHideBorder == 1) then
getglobal("eCastingBarMirror"..index):SetBackdrop(nil)
else
getglobal("eCastingBarMirror"..index):SetBackdrop({bgFile = CASTING_BAR_BACKGROUND_FILE, edgeFile = CASTING_BAR_EDGE_FILE, tile = true, tileSize = 16, edgeSize = 16, insets = { left = 5, right = 5, top = 5, bottom = 5 }})
getglobal("eCastingBarMirror"..index):SetBackdropColor(0,0,0,0.5)
end
end
end
--[[-------------------------------------------
Functions for Locked State
-------------------------------------------]]--
function eCastingBar_checkLocked()
for index, option in frameSuffixes do
-- only show the outline if we are enabled
if (eCastingBar_Saved[eCastingBar_Player][option.."Enabled"] == 1 and
eCastingBar_Saved[eCastingBar_Player][option.."Locked"] == 0) then
getglobal("eCastingBar"..option.."_Outline"):Show()
else
getglobal("eCastingBar"..option.."_Outline"):Hide()
end
end
for index = 1, MIRRORTIMER_NUMTIMERS, 1 do
-- only show the outline if we are enabled
if (eCastingBar_Saved[eCastingBar_Player].MirrorEnabled == 1 and
eCastingBar_Saved[eCastingBar_Player].MirrorLocked == 0) then
getglobal("eCastingBarMirror_Outline"):Show()
else
getglobal("eCastingBarMirror_Outline"):Hide()
end
end
end
--[[-------------------------------------------
Functions for Enabled State
-------------------------------------------]]--
--[[ Disables the frame. ]]--
function eCastingBar_Disable( fraFrame )
eCastingBar_Saved[eCastingBar_Player][fraFrame.."Enabled"] = 0
local intIndex = 0
local strEvent = ""
-- for each border in eCastingBar__Events register event.
if (fraFrame == "") then
for intIndex, strEvent in eCastingBar__Events do
-- make sure old casting bar is registered
eCastingBar_Register( "CastingBarFrame", strEvent )
-- now unregister our casting bar
eCastingBar_Unregister( "eCastingBar", strEvent )
end
-- CastTime mod exist
if( CastTimeFrame ) then
-- for each event in eCastingBar__CastTimeEvents register event.
for intIndex, strEvent in eCastingBar__CastTimeEvents do
-- make sure CastTime mod is enabled also bar is registered
eCastingBar_Register( "CastTimeFrame", strEvent )
end
end
end
-- is the frame unlocked?
if( eCastingBar_Saved[eCastingBar_Player][fraFrame.."Locked"] == 0 ) then
-- yes, lets hide the outline
getglobal("eCastingBar"..fraFrame.."_Outline"):Hide( )
end
-- Check for FlightMap
if (FlightMapFrame) then
if (eCastingBar_Saved[eCastingBar_Player].FlightMapX and eCastingBar_Saved[eCastingBar_Player].FlightMapY) then
FlightMapTimesFrame:ClearAllPoints()
FlightMapTimesFrame:SetPoint("BOTTOMLEFT", "UIParent", "BOTTOMLEFT", eCastingBar_Saved[eCastingBar_Player].FlightMapX, eCastingBar_Saved[eCastingBar_Player].FlightMapY )
end
end
end
--[[ Enables the frame. ]]--
function eCastingBar_Enable( fraFrame )
eCastingBar_Saved[eCastingBar_Player][fraFrame.."Enabled"] = 1
local intIndex = 0
local strEvent = ""
if (fraFrame == "") then
-- for each border in eCastingBar__Events register event.
for intIndex, strEvent in eCastingBar__Events do
-- make sure our bar is registered
eCastingBar_Register( "eCastingBar", strEvent )
-- now unregister blizzard bar
eCastingBar_Unregister( "CastingBarFrame", strEvent )
end
-- CastTime mod exist
if( CastTimeFrame ) then
-- for each event in eCastingBar__CastTimeEvents register event.
for intIndex, strEvent in eCastingBar__CastTimeEvents do
-- make sure CastTime mod is enabled also bar is registered
eCastingBar_Unregister( "CastTimeFrame", strEvent )
end
end
end
-- is the frame unlocked?
if( eCastingBar_Saved[eCastingBar_Player][fraFrame.."Locked"] == 0 ) then
-- yes, lets show the outline
getglobal("eCastingBar"..fraFrame.."_Outline"):Show( )
end
end
--[[ Toggle enabled state. ]]--
function eCastingBar_checkEnabled()
for index, option in frameSuffixes do
if (eCastingBar_Saved[eCastingBar_Player][option.."Enabled"] == 1) then
eCastingBar_Enable(option, 1)
else
eCastingBar_Disable(option, 0)
end
end
for index = 1, MIRRORTIMER_NUMTIMERS, 1 do
if (eCastingBar_Saved[eCastingBar_Player].MirrorEnabled == 1) then
if( eCastingBar_Saved[eCastingBar_Player].MirrorLocked == 0 ) then
-- yes, lets show the outline
getglobal("eCastingBarMirror_Outline"):Show()
end
else
if( eCastingBar_Saved[eCastingBar_Player].MirrorLocked == 0 ) then
-- yes, lets hide the outline
getglobal("eCastingBarMirror_Outline"):Hide()
end
end
end
end
--[[-------------------------------------------
Functions for using the Texture
-------------------------------------------]]--
--[[ Toggle enabled state. ]]--
function eCastingBar_checkTextures()
for index, option in frameSuffixes do
if ( eCastingBar_Saved[eCastingBar_Player][option.."UsePerlTexture"] == 1) then
getglobal("eCastingBar"..option.."Texture"):SetTexture( CASTING_BAR_PERL_TEXTURE )
else
getglobal("eCastingBar"..option.."Texture"):SetTexture( CASTING_BAR_DEFAULT_TEXTURE )
end
getglobal("eCastingBar"..option.."Texture"):SetWidth(20)
getglobal("eCastingBar"..option.."Texture"):SetHeight(10)
end
for index = 1, MIRRORTIMER_NUMTIMERS, 1 do
if ( eCastingBar_Saved[eCastingBar_Player].MirrorUsePerlTexture == 1) then
getglobal("eCastingBarMirror"..index.."StatusBarTexture"):SetTexture( CASTING_BAR_PERL_TEXTURE )
else
getglobal("eCastingBarMirror"..index.."StatusBarTexture"):SetTexture( CASTING_BAR_DEFAULT_TEXTURE )
end
getglobal("eCastingBarMirror"..index.."StatusBarTexture"):SetWidth(20)
getglobal("eCastingBarMirror"..index.."StatusBarTexture"):SetHeight(10)
end
end
function eCastingBar_checkTimeColors()
local Red, Green, Blue, Alpha
for index, option in frameSuffixes do
Red, Green, Blue, Alpha = unpack(eCastingBar_Saved[eCastingBar_Player][option.."TimeColor"])
getglobal("eCastingBar"..option.."_Time"):SetTextColor(Red,Green,Blue, Alpha )
end
Red, Green, Blue, Alpha = unpack(eCastingBar_Saved[eCastingBar_Player].MirrorTimeColor)
for index = 1, MIRRORTIMER_NUMTIMERS, 1 do
getglobal("eCastingBarMirror"..index.."StatusBar_Time"):SetTextColor(Red,Green,Blue, Alpha )
end
end
function eCastingBar_setDelayColor()
local Red, Green, Blue, Alpha
Red, Green, Blue, Alpha = unpack(eCastingBar_Saved[eCastingBar_Player].DelayColor)
eCastingBar_Delay:SetTextColor(Red,Green,Blue, Alpha )
end
--[[ sets up the flash to look cool ]]--
-- (thanks goes to kaitlin for the code used while resting).
function eCastingBar_checkFlashBorderColors()
local frmFrame = "eCastingBarFlash"
local intIndex = 0
local strBorder = ""
local Red, Green, Blue, Alpha
for index, option in frameSuffixes do
Red, Green, Blue, Alpha = unpack(eCastingBar_Saved[eCastingBar_Player][option.."FlashBorderColor"])
-- for each border in eCastingBar__FlashBorders set the color to gold.
for intIndex, strBorder in eCastingBar__FlashBorders do
getglobal( "eCastingBar"..option.."Flash_"..strBorder ):SetVertexColor( Red, Green, Blue, Alpha )
end
end
for index = 1, MIRRORTIMER_NUMTIMERS, 1 do
Red, Green, Blue, Alpha = unpack(eCastingBar_Saved[eCastingBar_Player].MirrorFlashBorderColor)
for intIndex, strBorder in eCastingBar__FlashBorders do
getglobal( "eCastingBarMirror"..index.."Flash_"..strBorder ):SetVertexColor( Red, Green, Blue, Alpha )
end
end
end
-- Sets the width and height of the casting bar
function eCastingBar_SetSize()
local width, height, bottom, left, bar
for index, option in frameSuffixes do
-- check boundaries
if (eCastingBar_Saved[eCastingBar_Player][option.."Width"] < CASTING_BAR_SLIDER_WIDTH_MIN) then
width = CASTING_BAR_SLIDER_WIDTH_MIN
elseif (eCastingBar_Saved[eCastingBar_Player][option.."Width"] > CASTING_BAR_SLIDER_WIDTH_MAX ) then
width = CASTING_BAR_SLIDER_WIDTH_MAX
else
width = eCastingBar_Saved[eCastingBar_Player][option.."Width"]
end
if (eCastingBar_Saved[eCastingBar_Player][option.."Height"] > CASTING_BAR_SLIDER_HEIGHT_MAX) then
height = CASTING_BAR_SLIDER_HEIGHT_MAX
elseif (eCastingBar_Saved[eCastingBar_Player][option.."Height"] < CASTING_BAR_SLIDER_HEIGHT_MIN ) then
height = CASTING_BAR_SLIDER_HEIGHT_MIN
else
height = eCastingBar_Saved[eCastingBar_Player][option.."Height"]
end
--if (eCastingBar_Saved[eCastingBar_Player][option.."Left"] < 0) then
-- left = 0
--else
left = eCastingBar_Saved[eCastingBar_Player][option.."Left"]
--end
--if (eCastingBar_Saved[eCastingBar_Player][option.."Bottom"] < 0 ) then
-- bottom = 0
--else
bottom = eCastingBar_Saved[eCastingBar_Player][option.."Bottom"]
--end
getglobal("eCastingBar"..option):SetWidth(width)
getglobal("eCastingBar"..option):SetHeight(height)
getglobal("eCastingBar"..option.."Background"):SetWidth(width - 9)
getglobal("eCastingBar"..option.."Background"):SetHeight(height - 8)
getglobal("eCastingBar"..option.."Flash"):SetWidth(width)
getglobal("eCastingBar"..option.."Flash"):SetHeight(height)
getglobal("eCastingBar"..option.."StatusBar"):SetWidth(width - 9)
getglobal("eCastingBar"..option.."StatusBar"):SetHeight(height - 10)
getglobal("eCastingBar"..option.."_Outline"):SetWidth(width)
getglobal("eCastingBar"..option.."_Outline"):SetHeight(height)
getglobal("eCastingBar"..option.."_Outline"):ClearAllPoints()
getglobal("eCastingBar"..option.."_Outline"):SetPoint("BOTTOMLEFT", "UIParent", "BOTTOMLEFT", left, bottom )
getglobal("eCastingBar"..option.."Flash_TOP"):SetWidth(width - 24)
getglobal("eCastingBar"..option.."Flash_BOTTOM"):SetWidth(width - 24)
getglobal("eCastingBar"..option.."Flash_LEFT"):SetHeight(height - 24)
getglobal("eCastingBar"..option.."Flash_RIGHT"):SetHeight(height - 24)
getglobal("eCastingBar"..option.."Spark"):SetHeight(height + 13)
getglobal("eCastingBar"..option.."Text"):SetWidth(width - 49)
getglobal("eCastingBar"..option.."Text"):SetHeight(height + 13)
-- set the font size
eCastingBarText:SetTextHeight(eCastingBar_Saved[eCastingBar_Player][option.."FontSize"])
eCastingBar_Time:SetTextHeight(eCastingBar_Saved[eCastingBar_Player][option.."FontSize"])
end
for index = 1, MIRRORTIMER_NUMTIMERS, 1 do
-- check boundaries
if (eCastingBar_Saved[eCastingBar_Player].MirrorWidth < CASTING_BAR_SLIDER_WIDTH_MIN) then
width = CASTING_BAR_SLIDER_WIDTH_MIN
elseif (eCastingBar_Saved[eCastingBar_Player].MirrorWidth > CASTING_BAR_SLIDER_WIDTH_MAX ) then
width = CASTING_BAR_SLIDER_WIDTH_MAX
else
width = eCastingBar_Saved[eCastingBar_Player].MirrorWidth
end
if (eCastingBar_Saved[eCastingBar_Player].MirrorHeight > CASTING_BAR_SLIDER_HEIGHT_MAX) then
height = CASTING_BAR_SLIDER_HEIGHT_MAX
elseif (eCastingBar_Saved[eCastingBar_Player].MirrorHeight < CASTING_BAR_SLIDER_HEIGHT_MIN ) then
height = CASTING_BAR_SLIDER_HEIGHT_MIN
else
height = eCastingBar_Saved[eCastingBar_Player].MirrorHeight
end
--if (eCastingBar_Saved[eCastingBar_Player].MirrorLeft < 0) then
-- left = 0
--else
left = eCastingBar_Saved[eCastingBar_Player].MirrorLeft
--end
--if (eCastingBar_Saved[eCastingBar_Player].MirrorBottom < 0 ) then
-- bottom = 0
--else
bottom = eCastingBar_Saved[eCastingBar_Player].MirrorBottom
--end
getglobal("eCastingBarMirror"..index):SetWidth(width)
getglobal("eCastingBarMirror"..index):SetHeight(height)
getglobal("eCastingBarMirror"..index.."Background"):SetWidth(width - 9)
getglobal("eCastingBarMirror"..index.."Background"):SetHeight(height - 8)
getglobal("eCastingBarMirror"..index.."Flash"):SetWidth(width)
getglobal("eCastingBarMirror"..index.."Flash"):SetHeight(height)
getglobal("eCastingBarMirror"..index.."StatusBar"):SetWidth(width - 9)
getglobal("eCastingBarMirror"..index.."StatusBar"):SetHeight(height - 10)
getglobal("eCastingBarMirror_Outline"):SetWidth(width)
getglobal("eCastingBarMirror_Outline"):SetHeight(height)
getglobal("eCastingBarMirror_Outline"):ClearAllPoints()
getglobal("eCastingBarMirror_Outline"):SetPoint("BOTTOMLEFT", "UIParent", "BOTTOMLEFT", left, bottom )
getglobal("eCastingBarMirror"..index.."Flash_TOP"):SetWidth(width - 24)
getglobal("eCastingBarMirror"..index.."Flash_BOTTOM"):SetWidth(width - 24)
getglobal("eCastingBarMirror"..index.."Flash_LEFT"):SetHeight(height - 24)
getglobal("eCastingBarMirror"..index.."Flash_RIGHT"):SetHeight(height - 24)
getglobal("eCastingBarMirror"..index.."StatusBarSpark"):SetHeight(height + 13)
getglobal("eCastingBarMirror"..index.."StatusBarText"):SetWidth(width - 49)
getglobal("eCastingBarMirror"..index.."StatusBarText"):SetHeight(height + 13)
-- set the font size
getglobal("eCastingBarMirror"..index.."StatusBarText"):SetTextHeight(eCastingBar_Saved[eCastingBar_Player].MirrorFontSize)
getglobal("eCastingBarMirror"..index.."StatusBar_Time"):SetTextHeight(eCastingBar_Saved[eCastingBar_Player].MirrorFontSize)
end
end
function eCastingBar_Copy_Table(src, dest)
for index, value in src do
if (type(value) == "table") then
dest[index] = {};
eCastingBar_Copy_Table(value, dest[index]);
else
dest[index] = value;
end
end
end
------------------- MIRROR -------------------
function eCastingBarMirror_OnLoad()
this:RegisterEvent("MIRROR_TIMER_PAUSE");
this:RegisterEvent("MIRROR_TIMER_STOP");
this:RegisterEvent("PLAYER_ENTERING_WORLD");
this.timer = nil;
end
Generated by GNU Enscript 1.6.5.90.