Files
ice-hud/modules/RangeCheck.lua
2024-04-04 08:14:32 -05:00

175 lines
4.4 KiB
Lua

local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
local RangeCheck = IceCore_CreateClass(IceElement)
RangeCheck.prototype.scheduledEvent = nil
local LibRange = nil
local DogTag = nil
-- Constructor --
function RangeCheck.prototype:init()
RangeCheck.super.prototype.init(self, "RangeCheck")
self.scalingEnabled = true
LibRange = LibStub("LibRangeCheck-3.0", true)
end
function RangeCheck.prototype:Enable(core)
RangeCheck.super.prototype.Enable(self, core)
if IceHUD.IceCore:ShouldUseDogTags() then
DogTag = LibStub("LibDogTag-3.0", true)
self:RegisterFontStrings()
else
self.scheduledEvent = self:ScheduleRepeatingTimer("UpdateRange", 0.1)
end
end
function RangeCheck.prototype:Disable(core)
RangeCheck.super.prototype.Disable(self, core)
if DogTag then
self:UnregisterFontStrings()
else
self:CancelTimer(self.scheduledEvent, true)
end
end
function RangeCheck.prototype:GetDefaultSettings()
local defaults = RangeCheck.super.prototype.GetDefaultSettings(self)
defaults["rangeString"] = "Range: [HostileColor Range]"
defaults["vpos"] = 220
defaults["hpos"] = 0
defaults["enabled"] = false
return defaults
end
function RangeCheck.prototype:GetOptions()
local opts = RangeCheck.super.prototype.GetOptions(self)
opts["vpos"] = {
type = "range",
name = L["Vertical Position"],
desc = L["Vertical Position"],
get = function()
return self.moduleSettings.vpos
end,
set = function(info, v)
self.moduleSettings.vpos = v
self:Redraw()
end,
min = -300,
max = 600,
step = 1,
disabled = function()
return not self.moduleSettings.enabled
end,
order = 31
}
opts["hpos"] = {
type = "range",
name = L["Horizontal Position"],
desc = L["Horizontal Position"],
get = function()
return self.moduleSettings.hpos
end,
set = function(info, v)
self.moduleSettings.hpos = v
self:Redraw()
end,
min = -500,
max = 500,
step = 1,
disabled = function()
return not self.moduleSettings.enabled
end,
order = 32
}
opts["rangeString"] = {
type = 'input',
name = L["Range string"],
desc = L["DogTag-formatted string to use for the range display (only available if LibDogTag is being used)\n\nType /dogtag for a list of available tags"],
get = function()
return self.moduleSettings.rangeString
end,
set = function(info, v)
v = DogTag:CleanCode(v)
self.moduleSettings.rangeString = v
self:RegisterFontStrings()
self:Redraw()
end,
disabled = function()
return not self.moduleSettings.enabled or not DogTag or not LibRange
end,
usage = '',
order = 33
}
return opts
end
function RangeCheck.prototype:Redraw()
RangeCheck.super.prototype.Redraw(self)
if (self.moduleSettings.enabled) then
self:CreateFrame(true)
end
end
function RangeCheck.prototype:CreateFrame(redraw)
if not (self.frame) then
self.frame = CreateFrame("Frame", "IceHUD_"..self.elementName, self.parent)
end
self.frame:SetScale(self.moduleSettings.scale)
self.frame:SetFrameStrata(IceHUD.IceCore:DetermineStrata("BACKGROUND"))
self.frame:SetWidth(200)
self.frame:SetHeight(32)
self.frame:ClearAllPoints()
self.frame:SetPoint("TOP", self.parent, "TOP", self.moduleSettings.hpos, self.moduleSettings.vpos)
self.frame.rangeFontString = self:FontFactory(--[[self.moduleSettings.fontSize+1]] 13, self.frame, self.frame.rangeFontString)
self.frame.rangeFontString:SetJustifyH("CENTER")
self.frame.rangeFontString:SetJustifyV("TOP")
self.frame.rangeFontString:SetAllPoints(self.frame)
end
function RangeCheck.prototype:RegisterFontStrings()
if DogTag and LibRange then
DogTag:AddFontString(self.frame.rangeFontString, self.frame, self.moduleSettings.rangeString, "Unit", { unit = "target" })
DogTag:UpdateAllForFrame(self.frame)
end
end
function RangeCheck.prototype:UnregisterFontStrings()
if DogTag then
DogTag:RemoveFontString(self.frame.rangeFontString)
end
end
-- this function is called every 0.1 seconds only if LibDogTag is not being used
function RangeCheck.prototype:UpdateRange()
if LibRange and UnitExists("target") then
local min, max = LibRange:getRange("target")
if min then
if max then
self.frame.rangeFontString:SetText("Range: " .. min .. " - " .. max)
else
self.frame.rangeFontString:SetText("Range: " .. min .. "+")
end
else
self.frame.rangeFontString:SetText("Unknown")
end
self.frame.rangeFontString:SetWidth(0)
else
self.frame.rangeFontString:SetText()
end
end
IceHUD.RangeCheck = RangeCheck:new()