You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

253 lines
7.8 KiB

local GlobalAddonName, ExRT = ...
if ExRT.isClassic then
return
end
local VMRT = nil
local GetSpellCharges, GetTime, floor, GetSpellTexture = ExRT.F.GetSpellCharges or GetSpellCharges, GetTime, floor, C_Spell and C_Spell.GetSpellTexture or GetSpellTexture
local module = ExRT:New("BattleRes",ExRT.L.BattleRes)
local ELib,L = ExRT.lib,ExRT.L
function module.options:Load()
self:CreateTilte()
self.enableChk = ELib:Check(self,L.Enable,VMRT.BattleRes.enabled):Point(15,-30):AddColorState():OnClick(function(self)
if self:GetChecked() then
VMRT.BattleRes.enabled = true
module:Enable()
else
VMRT.BattleRes.enabled = nil
module:Disable()
end
end)
self.fixChk = ELib:Check(self,L.BattleResFix,VMRT.BattleRes.fix):Point(15,-55):OnClick(function(self)
if self:GetChecked() then
VMRT.BattleRes.fix = true
module.frame:Hide()
module.frame:SetMovable(false)
else
VMRT.BattleRes.fix = nil
if VMRT.BattleRes.enabled then
module.frame:Show()
end
module.frame:SetMovable(true)
end
end)
self.SliderScale = ELib:Slider(self,L.BattleResScale):Size(640):Point("TOP",0,-95):Range(5,200):SetTo(VMRT.BattleRes.Scale or 100):OnChange(function(self,event)
event = event - event%1
VMRT.BattleRes.Scale = event
ExRT.F.SetScaleFix(module.frame,event/100)
self.tooltipText = event
self:tooltipReload(self)
end)
self.SliderAlpha = ELib:Slider(self,L.BattleResAlpha):Size(640):Point("TOP",0,-130):Range(0,100):SetTo(VMRT.BattleRes.Alpha or 100):OnChange(function(self,event)
event = event - event%1
VMRT.BattleRes.Alpha = event
module.frame:SetAlpha(event/100)
self.tooltipText = event
self:tooltipReload(self)
end)
self.shtml1 = ELib:Text(self,L.BattleResHelp,12):Size(650,0):Point("TOP",0,-165):Top()
self.hideTimerChk = ELib:Check(self,L.BattleResHideTime,VMRT.BattleRes.HideTimer):Point(15,-200):Tooltip(L.BattleResHideTimeTooltip):OnClick(function(self)
if self:GetChecked() then
VMRT.BattleRes.HideTimer = true
module.frame.time:Hide()
else
VMRT.BattleRes.HideTimer = nil
module.frame.time:Show()
end
end)
self.frameStrataDropDown = ELib:DropDown(self,275,8):Point(15,-225):Size(260):SetText(L.S_Strata)
local function FrameStrataDropDown_SetVaule(_,arg)
VMRT.BattleRes.Strata = arg
ELib:DropDownClose()
for i=1,#self.frameStrataDropDown.List do
self.frameStrataDropDown.List[i].checkState = arg == self.frameStrataDropDown.List[i].arg1
end
module.frame:SetFrameStrata(arg)
end
for i,strataString in ipairs({"BACKGROUND","LOW","MEDIUM","HIGH","DIALOG","FULLSCREEN","FULLSCREEN_DIALOG","TOOLTIP"}) do
self.frameStrataDropDown.List[i] = {
text = strataString,
checkState = VMRT.BattleRes.Strata == strataString,
radio = true,
arg1 = strataString,
func = FrameStrataDropDown_SetVaule,
}
end
end
function module:Enable()
if not VMRT.BattleRes.HideTimer then
module.frame.cooldown.noCooldownCount = true
else
module.frame.cooldown.noCooldownCount = nil
end
module:RegisterTimer()
if not VMRT.BattleRes.fix then
module:ResetStates()
module.frame:Show()
module.frame:SetMovable(true)
end
end
function module:Disable()
module:UnregisterTimer()
module.frame:Hide()
end
function module.main:ADDON_LOADED()
VMRT = _G.VMRT
VMRT.BattleRes = VMRT.BattleRes or {}
if VMRT.BattleRes.Left and VMRT.BattleRes.Top then
module.frame:ClearAllPoints()
module.frame:SetPoint("TOPLEFT",UIParent,"BOTTOMLEFT",VMRT.BattleRes.Left,VMRT.BattleRes.Top)
end
if VMRT.BattleRes.Alpha then module.frame:SetAlpha(VMRT.BattleRes.Alpha/100) end
if VMRT.BattleRes.Scale then module.frame:SetScale(VMRT.BattleRes.Scale/100) end
if VMRT.BattleRes.HideTimer then
module.frame.time:Hide()
end
if VMRT.BattleRes.enabled then
module:Enable()
end
VMRT.BattleRes.Strata = VMRT.BattleRes.Strata or "HIGH"
module.frame:SetFrameStrata(VMRT.BattleRes.Strata)
end
do
local stateHidden
local is0Charges
local isCooldownHidden
local cooldownStarted, cooldownDur, chargesNow
function module:ResetStates()
stateHidden = true
end
function module:timer(elapsed)
local charges, maxCharges, started, duration = GetSpellCharges(20484)
if not charges then
if not stateHidden then
if VMRT.BattleRes.fix then
module.frame:Hide()
end
module.frame.time:SetText("")
module.frame.charge:SetText("")
module.frame.cooldown:Hide()
chargesNow = nil
isCooldownHidden = true
cooldownStarted = nil
cooldownDur = nil
stateHidden = true
end
return
elseif stateHidden then
module.frame:Show()
stateHidden = false
end
if maxCharges == charges then
module.frame.time:SetFormattedText("")
if chargesNow ~= charges then
module.frame.charge:SetText(charges)
chargesNow = charges
end
if not isCooldownHidden then
module.frame.cooldown:Hide()
isCooldownHidden = true
end
else
local time = duration - (GetTime() - started)
module.frame.time:SetFormattedText("%d:%02d", floor(time/60), time%60)
if chargesNow ~= charges then
module.frame.charge:SetText(charges)
chargesNow = charges
end
if isCooldownHidden then
module.frame.cooldown:Show()
isCooldownHidden = false
end
if (cooldownStarted ~= started) or (cooldownDur ~= duration) then
module.frame.cooldown:SetCooldown(started,duration)
cooldownStarted = started
cooldownDur = duration
end
end
if charges == 0 and not is0Charges then
module.frame.charge:SetTextColor(1,0,0,1)
is0Charges = true
elseif charges ~= 0 and is0Charges then
module.frame.charge:SetTextColor(1,1,1,1)
is0Charges = false
end
end
end
do
local frame = CreateFrame("Frame","MRTBattleRes",UIParent)
module.frame = frame
frame:SetSize(64,64)
frame:SetPoint("TOP", 0,-200)
frame:SetFrameStrata("HIGH")
frame:EnableMouse(true)
frame:SetMovable(true)
frame:SetClampedToScreen(true)
frame:RegisterForDrag("LeftButton")
frame:SetScript("OnDragStart", function(self)
if self:IsMovable() then
self:StartMoving()
end
end)
frame:SetScript("OnDragStop", function(self)
self:StopMovingOrSizing()
VMRT.BattleRes.Left = self:GetLeft()
VMRT.BattleRes.Top = self:GetTop()
end)
frame.texture = frame:CreateTexture(nil, "BACKGROUND")
frame.texture:SetTexture(GetSpellTexture(20484))
frame.texture:SetAllPoints()
frame.texture:SetTexCoord(.1,.9,.1,.9)
frame.backdrop = CreateFrame("Frame",nil,frame, BackdropTemplateMixin and "BackdropTemplate")
frame.backdrop:SetPoint("TOPLEFT",-3,3)
frame.backdrop:SetPoint("BOTTOMRIGHT",3,-3)
frame.backdrop:SetBackdrop({bgFile = "",edgeFile = "Interface\\AddOns\\"..GlobalAddonName.."\\media\\UI-Tooltip-Border_grey",tile = true,tileSize = 16,edgeSize = 16,insets = {left = 3,right = 3,top = 3,bottom = 3}})
frame.backdrop:SetBackdropBorderColor(.3,.3,.3)
frame.cooldown = CreateFrame("Cooldown", nil, frame, "CooldownFrameTemplate")
frame.cooldown:SetHideCountdownNumbers(true)
frame.cooldown:SetAllPoints()
frame.cooldown:SetDrawEdge(false)
frame.cooldown:SetFrameLevel(40)
frame.texts = CreateFrame("Frame",nil,frame)
frame.texts:SetAllPoints()
frame.texts:SetFrameLevel(50)
frame.time = frame.texts:CreateFontString(nil,"ARTWORK","ExRTFontNormal")
frame.time:SetAllPoints()
frame.time:SetJustifyH("CENTER")
frame.time:SetJustifyV("MIDDLE")
frame.time:SetFont(frame.time:GetFont(),18,"OUTLINE")
frame.time:SetTextColor(1,1,1,1)
frame.charge = frame.texts:CreateFontString(nil,"ARTWORK","ExRTFontNormal")
frame.charge:SetAllPoints()
frame.charge:SetJustifyH("RIGHT")
frame.charge:SetJustifyV("BOTTOM")
frame.charge:SetFont(frame.charge:GetFont(),16,"OUTLINE")
frame.charge:SetShadowOffset(1,-1)
frame.charge:SetTextColor(1,1,1,1)
frame:Hide()
end