vanilla-wow-addons – Rev 1
?pathlinks?
-- Re-valued globals from default casting bar
-- Leave them global so the casting bar code will use them
CASTING_BAR_ALPHA_STEP = 0.01
CASTING_BAR_HOLD_TIME = 0
-- The addon
CastProgress = { version = 11100.03 }
-- Saved variables
CPVar = {}
function CastProgress:OnLoad()
this:RegisterEvent("ADDON_LOADED")
this:RegisterEvent("PLAYER_ENTERING_WORLD")
this:RegisterEvent("PLAYER_LEAVING_WORLD")
SLASH_CASTPROGRESS1 = "/castprogress"
SlashCmdList["CASTPROGRESS"] = CastProgress.SlashCommands
end
function CastProgress.SlashCommands(msg)
if (strlower(msg) == "home") then
CastProgressTitleFrame:ClearAllPoints()
CastProgressTitleFrame:SetPoint("TOP", "UIParent", "TOP", 0, -30)
CastProgressProgressFrame:ClearAllPoints()
CastProgressProgressFrame:SetPoint("TOP", "CastProgressTitleFrame", "BOTTOM", 0, 0)
CastProgressBarFrame:ClearAllPoints()
CastProgressBarFrame:SetPoint("BOTTOM", "UIParent", "BOTTOM", 0, 60)
CastProgressBarFrame:SetPoint("BOTTOM", "UIParent", "BOTTOM", 0, 60)
else
CastProgress:ShowOptions()
end
end
function CastProgress:Initialise()
CastProgress.player = UnitName("player")
CastProgress.this = this
-- Default settings
if not CPVar["version"] then
CPVar["version"] = CastProgress.version
end
if not CPVar[CastProgress.player] then
UIErrorsFrame:AddMessage(CastProgress.strings.NEW..CastProgress.player, 1.0, 1.0, 1.0, 1.0, UIERRORS_HOLD_TIME)
CPVar[CastProgress.player] = {}
CPVar[CastProgress.player].opacity = 1
CPVar[CastProgress.player].uiscale = 1
CPVar[CastProgress.player].addonmenu = 1
else
CastProgress:CheckSavedVars()
end
-- Update to current version
if (tonumber(CPVar["version"]) < CastProgress.version) then
UIErrorsFrame:AddMessage(CastProgress.strings.UPDATE..string.format("%.2f|", CastProgress.version), 1.0, 1.0, 1.0, 1.0, UIERRORS_HOLD_TIME)
if (CPVar["version"] < 1900.00) then
CPVar[CastProgress.player].uiscale = 1
CPVar[CastProgress.player].barScale = nil
CPVar[CastProgress.player].progressScale = nil
CPVar[CastProgress.player].titleScale = nil
end
if (CPVar["version"] < 11000.02) then
CPVar[CastProgress.player].addonmenu = 1
end
CPVar["version"] = CastProgress.version
end
CastProgressProgressFrame:SetBackdropColor(0,0,0,0)
CastProgressTitleFrame:SetBackdropColor(0,0,0,0)
CastProgressTitleText:SetTextColor(1, 1, 1)
CastProgress:InitOptions()
end
function CastProgress:DoCastingBar()
-- Sod the default casting bar, we'll do our own.
CastingBarFrame:UnregisterEvent("SPELLCAST_START")
CastingBarFrame:UnregisterEvent("SPELLCAST_STOP")
CastingBarFrame:UnregisterEvent("SPELLCAST_FAILED")
CastingBarFrame:UnregisterEvent("SPELLCAST_INTERRUPTED")
CastingBarFrame:UnregisterEvent("SPELLCAST_DELAYED")
CastingBarFrame:UnregisterEvent("SPELLCAST_CHANNEL_START")
CastingBarFrame:UnregisterEvent("SPELLCAST_CHANNEL_UPDATE")
CastProgressBarBorder:SetBackdrop({
bgFile = nil,
edgeFile = "Interface/Tooltips/UI-Tooltip-Border",
tile = true,
tileSize = 16,
edgeSize = 16,
insets = {3,3,3,3}
})
end
function CastProgress:AnchorCastBar()
end
function CastProgress:OnEvent(event)
if (event == "PLAYER_ENTERING_WORLD") then
CastProgress:DoScale()
CastProgress:DoCastingBar()
CastProgress:DoUIScale()
CastProgress:DoAnchors()
CastProgressProgressFrame:SetAlpha(CPVar[CastProgress.player].opacity)
CastProgressProgressFrame:Hide()
CastProgressTitleFrame:Hide()
CastProgressTitleFrame:SetAlpha(CPVar[CastProgress.player].opacity)
CastProgressBarFrame:Hide()
CastProgressBarFrame:SetAlpha(CPVar[CastProgress.player].opacity)
this:RegisterEvent("SPELLCAST_START")
this:RegisterEvent("SPELLCAST_STOP")
this:RegisterEvent("SPELLCAST_FAILED")
this:RegisterEvent("SPELLCAST_INTERRUPTED")
this:RegisterEvent("SPELLCAST_DELAYED")
this:RegisterEvent("SPELLCAST_CHANNEL_START")
this:RegisterEvent("SPELLCAST_CHANNEL_STOP")
CastProgress.alphaFrame = CastProgressProgressFrame
if CPVar[CastProgress.player].hideProgress then
if not CPVar[CastProgress.player].hideTitle then
CastProgress.alphaFrame = CastProgressTitleFrame
elseif CPVar[CastProgress.player].showBar then
CastProgress.alphaFrame = CastProgressBarFrame
else
CastProgress.alphaFrame = nil
end
end
end
if (event == "PLAYER_LEAVING_WORLD") then
this:UnregisterEvent("SPELLCAST_START")
this:UnregisterEvent("SPELLCAST_STOP")
this:UnregisterEvent("SPELLCAST_FAILED")
this:UnregisterEvent("SPELLCAST_INTERRUPTED")
this:UnregisterEvent("SPELLCAST_DELAYED")
this:UnregisterEvent("SPELLCAST_CHANNEL_START")
this:UnregisterEvent("SPELLCAST_CHANNEL_UPDATE")
this:UnregisterEvent("SPELLCAST_CHANNEL_STOP")
end
if (event == "ADDON_LOADED") and (arg1 == "CastProgress") then
CastProgress:Initialise()
return
end
-- Any events after here are for spellcasting events
-- A bit of chicanery to invoke the default casting bar, if the user wants it shown still
if (event == "SPELLCAST_START") then
CastProgress.elapsedTime = 0
CastProgress.progress = 0
CastProgress.castTime = arg2
CastProgressProgressFrame:SetAlpha(CPVar[CastProgress.player].opacity)
CastProgressTitleFrame:SetAlpha(CPVar[CastProgress.player].opacity)
CastProgressBarFrame:SetAlpha(CPVar[CastProgress.player].opacity)
CastProgressProgressText:SetTextColor(1, 1, 1)
CastProgressTitleText:SetText(arg1)
if not CPVar[CastProgress.player].hideProgress then
CastProgressProgressFrame:Show()
end
if not CPVar[CastProgress.player].hideTitle then
CastProgressTitleFrame:Show()
end
if CPVar[CastProgress.player].showBar then
CastProgressBarFrame:Show()
CastProgressBar:SetStatusBarColor(1.0, 0.7, 0.0)
CastProgressBarSpark:Show()
CastProgressBar:SetMinMaxValues(0, 1)
CastProgressBar:SetValue(CastProgress.elapsedTime/CastProgress.castTime)
end
CastProgress.delay = 0
CastProgress.casting = 1
CastProgress.fadeOut = nil
return
end
if (event == "SPELLCAST_CHANNEL_START") then
CastProgress.elapsedTime = 0
CastProgress.castTime = arg1
CastProgressProgressFrame:SetAlpha(CPVar[CastProgress.player].opacity)
CastProgressTitleFrame:SetAlpha(CPVar[CastProgress.player].opacity)
CastProgressBarFrame:SetAlpha(CPVar[CastProgress.player].opacity)
CastProgressProgressText:SetTextColor(1, 1, 1)
CastProgressTitleText:SetText(arg2)
if not CPVar[CastProgress.player].hideProgress then
CastProgressProgressFrame:Show()
end
if not CPVar[CastProgress.player].hideTitle then
CastProgressTitleFrame:Show()
end
if CPVar[CastProgress.player].showBar then
CastProgressBarFrame:Show()
CastProgressBar:SetStatusBarColor(1.0, 0.7, 0.0)
CastProgressBarSpark:Show()
CastProgressBar:SetMinMaxValues(0, 1)
CastProgressBar:SetValue(CastProgress.elapsedTime/CastProgress.castTime)
end
CastProgress.casting = 1
CastProgress.channeling = 0
CastProgress.fadeOut = nil
CastProgress.interrupted = nil
return
end
if (event == "SPELLCAST_FAILED") or (event == "SPELLCAST_INTERRUPTED") then
CastProgressProgressText:SetTextColor(1, 0, 0)
if (event == "SPELLCAST_FAILED") then
CastProgressProgressText:SetText(FAILED)
else
CastProgressProgressText:SetText(INTERRUPTED)
end
if CPVar[CastProgress.player].showBar then
CastProgressBar:SetStatusBarColor(1.0, 0.7, 0.0)
end
CastProgressBarSpark:Hide()
CastProgress.casting = nil
CastProgress.fadeOut = 1
return
end
if (event == "SPELLCAST_DELAYED") then
if CastProgress.castTime and (CastProgress.elapsedTime < CastProgress.castTime) then
CastProgress.delay = CastProgress.delay + arg1
CastProgress.elapsedTime = CastProgress.elapsedTime - arg1
i = 1 - (CastProgress.delay/CastProgress.castTime)
CastProgressProgressText:SetTextColor(1, i, i)
end
return
end
if (event == "SPELLCAST_CHANNEL_STOP") then
if CastProgress.elapsedTime and CastProgress.castTime and (CastProgress.elapsedTime/CastProgress.castTime < 0.97) then
CastProgressProgressText:SetTextColor(1, 0, 0)
CastProgressBarSpark:Hide()
CastProgressProgressText:SetText(INTERRUPTED)
CastProgress.casting = nil
CastProgress.fadeOut = 1
else
CastProgress.elapsedTime = CastProgress.castTime
if CPVar[CastProgress.player].showBar then
CastProgressBar:SetValue(1)
end
end
return
end
if (event == "SPELLCAST_STOP") then
return
end
end
function CastProgress:OnUpdate(elapsed)
if CastProgress.casting then
CastProgress.elapsedTime = CastProgress.elapsedTime + (elapsed * 1000)
if not CastProgress.castTime or (CastProgress.elapsedTime >= CastProgress.castTime) then
CastProgress.casting = nil
CastProgress.channeling = nil
CastProgress.fadeOut = 1
if CPVar[CastProgress.player].showBar then
CastProgressBar:SetValue(1)
CastProgressBar:SetStatusBarColor(0.0, 1.0, 0.0)
CastProgressBarSpark:Hide()
end
end
CastProgress:UpdateProgress()
end
if CastProgress.alphaFrame and CastProgress.fadeOut and not CastProgress.optionsShown then
local alpha = CastProgress.alphaFrame:GetAlpha() - CASTING_BAR_ALPHA_STEP
if (alpha > 0) then
CastProgressProgressFrame:SetAlpha(alpha)
CastProgressTitleFrame:SetAlpha(alpha)
CastProgressBarFrame:SetAlpha(alpha)
else
CastProgress.fadeOut = nil
CastProgressProgressFrame:Hide()
CastProgressProgressFrame:SetAlpha(CPVar[CastProgress.player].opacity)
CastProgressTitleFrame:Hide()
CastProgressTitleFrame:SetAlpha(CPVar[CastProgress.player].opacity)
CastProgressBarFrame:Hide()
CastProgressBarFrame:SetAlpha(CPVar[CastProgress.player].opacity)
CastProgressProgressText:SetText("")
CastProgressTitleText:SetText("")
end
end
end
function CastProgress:Increment()
if (CastProgress.castTime >= 8000) then
return 1
elseif (CastProgress.castTime >= 5000) then
return 2
elseif (CastProgress.castTime >= 3000) then
return 3
elseif (CastProgress.castTime >= 2000) then
return 4
end
return 5
end
function CastProgress:UpdateProgress()
local x
if CPVar[CastProgress.player].showBar then
CastProgressBar:SetValue(CastProgress.elapsedTime/CastProgress.castTime)
CastProgressBarSpark:SetPoint("CENTER", CastProgressBar, "LEFT", 190*CastProgress.elapsedTime/CastProgress.castTime, 0);
end
if CPVar[CastProgress.player].castTime then
x = (CastProgress.castTime - CastProgress.elapsedTime) / 1000
if (x < 0) then
x = 0
end
if (x ~= CastProgress.progress) then
CastProgressProgressText:SetText(string.format("%.1f", x))
if(x == 0) then
CastProgressProgressText:SetTextColor(0, 1, 0)
end
end
else
x = floor(100*(CastProgress.elapsedTime/CastProgress.castTime))
x = x - mod(x, CastProgress:Increment())
if (x > 100) then
x = 100
end
if (x ~= CastProgress.progress) then
CastProgressProgressText:SetText(string.format("%d%%", x))
if (x == 100) then
CastProgressProgressText:SetTextColor(0, 1, 0)
end
end
end
CastProgress.progress = x
end
function CastProgress:DoScale()
if CPVar[CastProgress.player].uiscale then
local scale = 1.0
CastProgressProgress:SetScale(scale)
CastProgressProgressFrame:SetWidth(125)
CastProgressProgressFrame:SetHeight(20)
CastProgressTitle:SetScale(scale)
CastProgressTitleFrame:SetWidth(200)
CastProgressTitleFrame:SetHeight(20)
if CPVar[CastProgress.player].showBar then
CastProgressBar:SetScale(scale)
CastProgressBarFrame:SetWidth(195)
CastProgressBarFrame:SetHeight(13)
end
else
CastProgressTitle:SetScale(CPVar[CastProgress.player].titleScale)
CastProgressTitleFrame:SetWidth(200 * CPVar[CastProgress.player].titleScale)
CastProgressTitleFrame:SetHeight(20 * CPVar[CastProgress.player].titleScale)
CastProgressProgress:SetScale(CPVar[CastProgress.player].progressScale)
CastProgressProgressFrame:SetWidth(125 * CPVar[CastProgress.player].progressScale)
CastProgressProgressFrame:SetHeight(20 * CPVar[CastProgress.player].progressScale)
if CPVar[CastProgress.player].showBar then
CastProgressBar:SetScale(CPVar[CastProgress.player].barScale)
CastProgressBarFrame:SetWidth(195 * CPVar[CastProgress.player].barScale)
CastProgressBarFrame:SetHeight(13 * CPVar[CastProgress.player].barScale)
end
end
end
function CastProgress:DoAnchors()
if CPVar[CastProgress.player]["CastProgressTitleFrame"] then
local titleFrame = getglobal("CastProgressTitleFrame")
titleFrame.sticky = CPVar[CastProgress.player]["CastProgressTitleFrame"]
CastProgress:Anchor(titleFrame)
end
if CPVar[CastProgress.player]["CastProgressProgressFrame"] then
local progressFrame = getglobal("CastProgressProgressFrame")
progressFrame.sticky = CPVar[CastProgress.player]["CastProgressProgressFrame"]
CastProgress:Anchor(progressFrame)
end
CastProgressTitleText:SetJustifyH(CPVar[CastProgress.player].titleJustify or "CENTER")
CastProgressProgressText:SetJustifyH(CPVar[CastProgress.player].progressJustify or "CENTER")
end
function CastProgress:DoUIScale()
if CPVar[CastProgress.player].uiscale then
CPVar[CastProgress.player].titleScale = nil
CPVar[CastProgress.player].progressScale = nil
CPVar[CastProgress.player].barScale = nil
OptionsFrame_DisableSlider(CastProgressTitleScaleSlider)
CastProgressSameScaleCheckButton:Disable()
CastProgressSameScaleCheckButtonText:SetTextColor(0.5, 0.5, 0.5)
else
if not CPVar[CastProgress.player].progressScale then
CPVar[CastProgress.player].progressScale = 1.0
end
if not CPVar[CastProgress.player].titleScale then
CPVar[CastProgress.player].titleScale = 1.0
end
if not CPVar[CastProgress.player].barScale then
CPVar[CastProgress.player].barScale = 1.0
end
OptionsFrame_EnableSlider(CastProgressTitleScaleSlider)
CastProgressSameScaleCheckButton:Enable()
CastProgressSameScaleCheckButtonText:SetTextColor(1.0, 0.8, 0.0)
CastProgressTitleScaleSlider:SetValue(CPVar[CastProgress.player].titleScale)
CastProgressProgressScaleSlider:SetValue(CPVar[CastProgress.player].progressScale)
CastProgressCastingBarScaleSlider:SetValue(CPVar[CastProgress.player].barScale)
end
if not CPVar[CastProgress.player].uiscale and not CPVar[CastProgress.player].sameScale then
OptionsFrame_EnableSlider(CastProgressProgressScaleSlider)
else
OptionsFrame_DisableSlider(CastProgressProgressScaleSlider)
end
if CPVar[CastProgress.player].showBar and not CPVar[CastProgress.player].uiscale and not CPVar[CastProgress.player].sameScale then
OptionsFrame_EnableSlider(CastProgressCastingBarScaleSlider)
else
OptionsFrame_DisableSlider(CastProgressCastingBarScaleSlider)
end
CastProgress:DoScale()
end
function CastProgress:UIScale()
CPVar[CastProgress.player].uiscale = this:GetChecked()
CastProgress:DoUIScale()
end
function CastProgress:StickyFrames()
CPVar[CastProgress.player].stickyFrames = this:GetChecked()
end
function CastProgress:AddonMenu()
CPVar[CastProgress.player].addonmenu = this:GetChecked()
if not CPVar[CastProgress.player].addonmenu then
DEFAULT_CHAT_FRAME:AddMessage(CastProgress.strings.ADDONMENU_DISABLE)
end
end
function CastProgress:CastTime()
CPVar[CastProgress.player].castTime = this:GetChecked()
end
function CastProgress:SameScale()
CPVar[CastProgress.player].sameScale = this:GetChecked()
CastProgress:DoUIScale()
end
function CastProgress:CastingBar()
CPVar[CastProgress.player].showBar = this:GetChecked()
if CPVar[CastProgress.player].showBar then
CastProgressBarFrame:Show()
CastProgressBarSpark:SetPoint("CENTER", CastProgressBarFrame, "LEFT", 97, -2)
CastProgressBarSpark:Show()
CastProgressBarFrame:Show()
CastProgressBarFrameDragTab:Show()
else
CPVar[CastProgress.player].showBar = nil
CastProgressBarFrame:Hide()
end
CastProgress:DoCastingBar()
CastProgress:DoUIScale()
end
function CastProgress:ShowTitle()
CPVar[CastProgress.player].hideTitle = this:GetChecked()
if CPVar[CastProgress.player].hideTitle then
CastProgressTitleFrame:SetBackdropColor(0,0,0,0)
CastProgressTitleFrame:Hide()
else
CastProgressTitleFrame:SetBackdropColor(0,0,0,1)
CastProgressTitleFrame:Show()
end
CastProgress:DoUIScale()
end
function CastProgress:ShowProgress()
CPVar[CastProgress.player].hideProgress = this:GetChecked()
if CPVar[CastProgress.player].hideProgress then
CastProgressProgressFrame:SetBackdropColor(0,0,0,0)
CastProgressProgressFrame:Hide()
else
CastProgressProgressFrame:SetBackdropColor(0,0,0,1)
CastProgressProgressFrame:Show()
end
CastProgress:DoUIScale()
end
function CastProgress:InitOptions()
if CPVar[CastProgress.player].addonmenu then
AddonMenu:AddMenuItem(CastProgress.strings.OPTIONS, CastProgress.ShowOptions, "Satrina Addons")
end
CastProgressOptionsCloseButton:SetText(CLOSE)
CastProgressHomeButton:SetText("Home")
CastProgressUIScaleCheckButtonText:SetText(CastProgress.strings.UISCALE)
CastProgressAddonMenuCheckButtonText:SetText(CastProgress.strings.ADDONMENU)
CastProgressCastTimeCheckButtonText:SetText(CastProgress.strings.CASTTIME)
CastProgressProgressCheckButtonText:SetText(CastProgress.strings.PROGRESS)
CastProgressTitleCheckButtonText:SetText(CastProgress.strings.TITLE)
CastProgressSameScaleCheckButtonText:SetText(CastProgress.strings.SAMESCALE)
CastProgressCastingBarCheckButtonText:SetText(CastProgress.strings.CASTBAR)
CastProgressTitleDragTabLabel:SetText("Drag")
CastProgressProgressDragTabLabel:SetText("Drag")
CastProgressBarFrameDragTabLabel:SetText("Drag")
CastProgressTitleJustifyDropDownLabel:SetText(CastProgress.strings.JUSTIFY)
CastProgressProgressJustifyDropDownLabel:SetText(CastProgress.strings.PJUSTIFY)
CastProgressStickyCheckButtonText:SetText(CastProgress.strings.STICKY)
CastProgressTitleScaleSliderText:SetText(CastProgress.strings.TITLESCALE)
CastProgressTitleScaleSliderLow:SetText("0.5")
CastProgressTitleScaleSliderHigh:SetText("2.0")
CastProgressTitleScaleSlider:SetMinMaxValues(0.5, 2.0)
CastProgressTitleScaleSlider:SetValueStep(0.01)
CastProgressProgressScaleSliderText:SetText(CastProgress.strings.PROGRESSSCALE)
CastProgressProgressScaleSliderLow:SetText("0.5")
CastProgressProgressScaleSliderHigh:SetText("2.0")
CastProgressProgressScaleSlider:SetMinMaxValues(0.5, 2.0)
CastProgressProgressScaleSlider:SetValueStep(0.01)
CastProgressCastingBarScaleSliderText:SetText(CastProgress.strings.BARSCALE)
CastProgressCastingBarScaleSliderLow:SetText("0.5")
CastProgressCastingBarScaleSliderHigh:SetText("2.0")
CastProgressCastingBarScaleSlider:SetMinMaxValues(0.5, 2.0)
CastProgressCastingBarScaleSlider:SetValueStep(0.01)
CastProgressOpacitySliderText:SetText(CastProgress.strings.OPACITY)
CastProgressOpacitySliderLow:SetText("0.1")
CastProgressOpacitySliderHigh:SetText("1.0")
CastProgressOpacitySlider:SetMinMaxValues(0.1, 1.0)
CastProgressOpacitySlider:SetValueStep(0.01)
CastProgressOpacitySlider:SetValue(CPVar[CastProgress.player].opacity)
OptionsFrame_EnableSlider(CastProgressOpacitySlider)
CastProgressOptionsVersionString:SetText(string.format("%s%.2f|r", CastProgress.strings.VERSION, CastProgress.version))
CastProgressUIScaleCheckButton:SetChecked(CPVar[CastProgress.player].uiscale)
CastProgressAddonMenuCheckButton:SetChecked(CPVar[CastProgress.player].addonmenu)
CastProgressSameScaleCheckButton:SetChecked(CPVar[CastProgress.player].samescale)
CastProgressCastTimeCheckButton:SetChecked(CPVar[CastProgress.player].castTime)
CastProgressCastingBarCheckButton:SetChecked(CPVar[CastProgress.player].showBar)
CastProgressProgressCheckButton:SetChecked(CPVar[CastProgress.player].hideProgress)
CastProgressTitleCheckButton:SetChecked(CPVar[CastProgress.player].hideTitle)
CastProgressStickyCheckButton:SetChecked(CPVar[CastProgress.player].stickyFrames)
if not CPVar[CastProgress.player].uiscale then
CastProgressProgressScaleSlider:SetValue(CPVar[CastProgress.player].progressScale)
CastProgressTitleScaleSlider:SetValue(CPVar[CastProgress.player].titleScale)
CastProgressCastingBarScaleSlider:SetValue(CPVar[CastProgress.player].barScale)
end
CastProgressProgressFrame.tab = CastProgressProgressDragTabLabel
CastProgressTitleFrame.tab = CastProgressTitleDragTabLabel
UIDropDownMenu_Initialize(CastProgressTitleJustifyDropDown, CastProgress.InitTitleJustifyDropDown)
UIDropDownMenu_Initialize(CastProgressProgressJustifyDropDown, CastProgress.InitProgressJustifyDropDown)
end
function CastProgress:ShowOptions()
CastProgressOptions:Show()
CastProgressTitleText:SetText(CastProgress.strings.VERSION..string.format("%.2f|r", CastProgress.version).."|r")
CastProgressProgressText:SetText("[ | ]")
CastProgress.optionsShown = 1
CastProgress.optionsElapsed = 0
if not CPVar[CastProgress.player].hideProgress then
CastProgressProgressFrame:SetBackdropColor(0,0,0,1)
CastProgressProgressFrame:Show()
end
if not CPVar[CastProgress.player].hideTitle then
CastProgressTitleFrame:SetBackdropColor(0,0,0,1)
CastProgressTitleFrame:Show()
end
CastProgressBarFrame.fadeOut = nil
CastProgressTitleDragTab:Show()
CastProgressProgressDragTab:Show()
if CPVar[CastProgress.player].showBar then
CastProgressBarFrame:SetAlpha(CPVar[CastProgress.player].opacity)
if CT_CastBarFrame then
CT_LockMovables(1)
end
CastProgressBarFrame:Show()
CastProgressBarSpark:SetPoint("CENTER", CastProgressBarFrame, "LEFT", 97, -2)
CastProgressBarSpark:Show()
CastProgressBarFrame:Show()
CastProgressBarFrameDragTab:Show()
end
end
function CastProgress:CloseOptions()
CastProgressOptions:Hide()
CastProgressTitleDragTab:Hide()
CastProgressProgressDragTab:Hide()
CastProgressBarFrameDragTab:Hide()
CastProgress.optionsShown = nil
CastProgressProgressFrame:SetBackdropColor(0,0,0,0)
CastProgressTitleFrame:SetBackdropColor(0,0,0,0)
CastProgress.fadeOut = 1
CastProgressBarFrame.fadeOut = 1
if CT_CastBarFrame then
CT_LockMovables(nil)
end
end
function CastProgress:OnOptionsUpdate(elapsed)
if (CastProgress.optionsElapsed > 0.25) then
CastProgress.optionsElapsed = 0
-- Scaling
if not CPVar[CastProgress.player].uiscale then
if (CPVar[CastProgress.player].titleScale ~= CastProgressTitleScaleSlider:GetValue()) then
CPVar[CastProgress.player].titleScale = CastProgressTitleScaleSlider:GetValue()
if CPVar[CastProgress.player].sameScale then
CPVar[CastProgress.player].progressScale = CastProgressTitleScaleSlider:GetValue()
CPVar[CastProgress.player].barScale = CastProgressTitleScaleSlider:GetValue()
end
CastProgress:DoScale()
end
if not CPVar[CastProgress.player].sameScale and (CPVar[CastProgress.player].progressScale ~= CastProgressProgressScaleSlider:GetValue()) then
CPVar[CastProgress.player].progressScale = CastProgressProgressScaleSlider:GetValue()
CastProgress:DoScale()
end
if not CPVar[CastProgress.player].sameScale and (CPVar[CastProgress.player].barScale ~= CastProgressCastingBarScaleSlider:GetValue()) then
CPVar[CastProgress.player].barScale = CastProgressCastingBarScaleSlider:GetValue()
CastProgress:DoScale()
end
end
-- Opacity
if (CPVar[CastProgress.player].opacity ~= CastProgressOpacitySlider:GetValue()) then
CPVar[CastProgress.player].opacity = CastProgressOpacitySlider:GetValue()
CastProgressProgress:SetAlpha(CPVar[CastProgress.player].opacity)
CastProgressTitleFrame:SetAlpha(CPVar[CastProgress.player].opacity)
CastProgressBarFrame:SetAlpha(CPVar[CastProgress.player].opacity)
end
if CastProgress.moving and CPVar[CastProgress.player].stickyFrames then
-- Snap frames together
local rc = 1
if (CastProgress.moving == CastProgressProgressFrame) and not CPVar[CastProgress.player].hideTitle then
rc = CastProgress:CheckCollision(CastProgressProgressFrame, CastProgressTitleFrame)
end
if rc and (CastProgress.moving == CastProgressProgressFrame) and CPVar[CastProgress.player].showBar then
rc = CastProgress:CheckCollision(CastProgressProgressFrame, CastProgressBarFrame)
end
if rc and (CastProgress.moving == CastProgressTitleFrame) and CPVar[CastProgress.player].showBar then
CastProgress:CheckCollision(CastProgressTitleFrame, CastProgressBarFrame)
end
end
else
CastProgress.optionsElapsed = CastProgress.optionsElapsed + elapsed
end
end
function CastProgress.InitTitleJustifyDropDown()
for i,t in {"LEFT","CENTER","RIGHT"} do
info = {}
info.text = t
info.value = t
info.func = CastProgress.TitleJustifyClick
if (t == CastProgressTitleText:GetJustifyH()) then
info.checked = true
CastProgressTitleJustifyDropDownText:SetText(t)
end
UIDropDownMenu_AddButton(info)
end
end
function CastProgress.TitleJustifyClick()
UIDropDownMenu_SetSelectedID(CastProgressTitleJustifyDropDown, this:GetID(), 1)
CastProgressTitleText:SetJustifyH(this.value)
CPVar[CastProgress.player].titleJustify = this.value
end
function CastProgress.InitProgressJustifyDropDown()
for i,t in {"LEFT","CENTER","RIGHT"} do
info = {}
info.text = t
info.value = t
info.func = CastProgress.ProgressJustifyClick
if (t == CastProgressProgressText:GetJustifyH()) then
info.checked = true
CastProgressProgressJustifyDropDownText:SetText(t)
end
UIDropDownMenu_AddButton(info)
end
end
function CastProgress.ProgressJustifyClick()
UIDropDownMenu_SetSelectedID(CastProgressProgressJustifyDropDown, this:GetID(), 1)
CastProgressProgressText:SetJustifyH(this.value)
CPVar[CastProgress.player].progressJustify = this.value
end
function CastProgress:CheckSavedVars()
-- Clean up any lingering deprecated saved bits
if CPVar[CastProgress.player].version then
CPVar[CastProgress.player].version = nil
end
if CPVar[CastProgress.player].scale then
CPVar[CastProgress.player].scale = nil
end
if CPVar[CastProgress.player].locked then
CPVar[CastProgress.player].locked = nil
end
end
-- Yeah, this could be done much more elegantly. Sue me.
function CastProgress:CheckCollision(f1,f2)
if not f1 or not f2 then
return
end
scaleMult = f2:GetEffectiveScale()/f1:GetEffectiveScale()
scaleMult = 1
f1.bottom = f1:GetBottom() * scaleMult
f1.top = f1:GetTop() * scaleMult
f1.left = f1:GetLeft() * scaleMult
f1.right = f1:GetRight() * scaleMult
f1.middle = (f1.left + f1.right ) / 2 * scaleMult
f1.vmiddle = (f1.top + f1.bottom) / 2 * scaleMult
f2.bottom = f2:GetBottom()
f2.top = f2:GetTop()
f2.left = f2:GetLeft()
f2.right = f2:GetRight()
f2.middle = (f2.left + f2.right ) / 2
f2.vmiddle = (f2.top + f2.bottom) / 2
local stickyRange = 10
if (f1.top <= f2.bottom + stickyRange) and (f1.top >= f2.bottom - stickyRange) then
if (f1.middle <= f2.middle + stickyRange) and (f1.middle >= f2.middle - stickyRange) then
f1.tab:SetTextColor(1,0,0)
f1.sticky = {"TOP", f2:GetName(), "BOTTOM"}
elseif (f1.left >= f2.left - stickyRange) and (f1.left <= f2.left + stickyRange) then
f1.tab:SetTextColor(1,0,0)
f1.sticky = {"TOPLEFT", f2:GetName(), "BOTTOMLEFT"}
elseif (f1.right >= f2.right - stickyRange) and (f1.right <= f2.right + stickyRange) then
f1.tab:SetTextColor(1,0,0)
f1.sticky = {"TOPRIGHT", f2:GetName(), "BOTTOMRIGHT"}
else
f1.tab:SetTextColor(1,1,1)
f1.sticky = nil
end
elseif (f1.bottom <= f2.top + stickyRange) and (f1.bottom >= f2.top - stickyRange) then
if (f1.middle <= f2.middle + stickyRange) and (f1.middle >= f2.middle - stickyRange) then
f1.tab:SetTextColor(1,0,1)
f1.sticky = {"BOTTOM", f2:GetName(), "TOP"}
elseif (f1.left >= f2.left - stickyRange) and (f1.left <= f2.left + stickyRange) then
f1.tab:SetTextColor(1,0,1)
f1.sticky = {"BOTTOMLEFT", f2:GetName(), "TOPLEFT"}
elseif (f1.right >= f2.right - stickyRange) and (f1.right <= f2.right + stickyRange) then
f1.tab:SetTextColor(1,0,1)
f1.sticky = {"BOTTOMRIGHT", f2:GetName(), "TOPRIGHT"}
else
f1.tab:SetTextColor(1,1,1)
f1.sticky = nil
end
elseif (f1.vmiddle >= f2.vmiddle - (stickyRange/2)) and (f1.vmiddle <= f2.vmiddle + stickyRange) then
if (f1.right >= f2.right - stickyRange) and (f1.right <= f2.right + stickyRange) then
f1.tab:SetTextColor(0,1,0)
f1.sticky = {"RIGHT", f2:GetName(), "RIGHT"}
elseif (f1.left >= f2.left - stickyRange) and (f1.left <= f2.left + stickyRange) then
f1.tab:SetTextColor(0,1,0)
f1.sticky = {"LEFT", f2:GetName(), "LEFT"}
elseif (f1.right >= f2.left - stickyRange) and (f1.right <= f2.left + stickyRange) then
f1.tab:SetTextColor(0,1,0)
f1.sticky = {"RIGHT", f2:GetName(), "LEFT"}
elseif (f1.left >= f2.right - stickyRange) and (f1.left <= f2.right + stickyRange) then
f1.tab:SetTextColor(0,1,0)
f1.sticky = {"LEFT", f2:GetName(), "RIGHT"}
elseif (f1.middle <= f2.middle + stickyRange) and (f1.middle >= f2.middle - stickyRange) then
f1.tab:SetTextColor(0,1,0)
f1.sticky = {"CENTER", f2:GetName(), "CENTER"}
else
f1.tab:SetTextColor(1,1,1)
f1.sticky = nil
return 1
end
else
f1.tab:SetTextColor(1,1,1)
f1.sticky = nil
return 1
end
end
function CastProgress:Anchor(frame)
if frame.sticky then
-- Figure out if we need any offsets
local x = 0
local y = 0
if (frame.sticky[2] == "CastProgressBarFrame") then
x = (string.find(frame.sticky[1], "LEFT") and 4) or (string.find(frame.sticky[1], "RIGHT") and -4) or 0
end
if (frame.sticky[1] == frame.sticky[3]) then
x = (string.find(frame.sticky[1], "LEFT") and 4) or (string.find(frame.sticky[1], "RIGHT") and -4) or 0
end
frame:ClearAllPoints()
frame:SetPoint(frame.sticky[1], frame.sticky[2], frame.sticky[3], x, y)
end
end
function CastProgress:MouseUp()
local f = this:GetParent()
f:StopMovingOrSizing()
CastProgress:Anchor(f)
CastProgress.moving = nil
local name = f:GetName()
if f.sticky then
CPVar[CastProgress.player][name] = f.sticky
else
CPVar[CastProgress.player][name] = nil
end
end
Generated by GNU Enscript 1.6.5.90.