Files
ice-hud/modules/TargetOfTargetMana.lua
Parnic 7496475ff4 Fix potential nil access
I can't reproduce a problem here, but based on some user feedback, this could potentially be an issue. Most other modules are calling the super's Update() first thing, but these modules call them later, so healthPercentage may not be defined at this point.
2022-12-19 12:19:10 -06:00

109 lines
3.1 KiB
Lua

local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
local TargetTargetMana = IceCore_CreateClass(IceTargetMana)
TargetTargetMana.prototype.scheduledEvent = nil
local SelfDisplayModeOptions = {"Hide", "Normal"}
-- Constructor --
function TargetTargetMana.prototype:init()
TargetTargetMana.super.prototype.init(self, "TargetTargetMana", "targettarget")
self:SetDefaultColor("TargetTargetMana", 52, 64, 221)
self:SetDefaultColor("TargetTargetRage", 235, 44, 26)
self:SetDefaultColor("TargetTargetEnergy", 228, 242, 31)
self:SetDefaultColor("TargetTargetFocus", 242, 149, 98)
self:SetDefaultColor("TargetTargetRunicPower", 52, 64, 221)
end
function TargetTargetMana.prototype:GetDefaultSettings()
local settings = TargetTargetMana.super.prototype.GetDefaultSettings(self)
settings["side"] = IceCore.Side.Right
settings["offset"] = 11
settings["upperText"] = "[PercentMP:Round]"
settings["lowerText"] = "[FractionalMP:Short:PowerColor]"
settings["barVerticalOffset"] = 35
settings["scale"] = 0.7
settings["enabled"] = false
settings["selfDisplayMode"] = "Normal"
return settings
end
function TargetTargetMana.prototype:GetOptions()
local opts = TargetTargetMana.super.prototype.GetOptions(self)
opts["selfDisplayMode"] = {
type = 'select',
name = L["Self Display Mode"],
desc = L["What this bar should do whenever the player is the TargetOfTarget"],
get = function(info)
return IceHUD:GetSelectValue(info, self.moduleSettings.selfDisplayMode)
end,
set = function(info, value)
self.moduleSettings.selfDisplayMode = info.option.values[value]
self:Redraw()
end,
disabled = function()
return not self.moduleSettings.enabled
end,
values = SelfDisplayModeOptions,
order = 44,
}
return opts
end
function TargetTargetMana.prototype:Enable(core)
self.registerEvents = false
-- make sure the super class doesn't override our color selection
self.determineColor = false
TargetTargetMana.super.prototype.Enable(self, core)
self.scheduledEvent = self:ScheduleRepeatingTimer("Update", 0.1, "targettarget")
end
function TargetTargetMana.prototype:Disable(core)
TargetTargetMana.super.prototype.Disable(self, core)
self:CancelTimer(self.scheduledEvent, true)
end
function TargetTargetMana.prototype:Update(unit)
self.color = "TargetTargetMana"
if self.moduleSettings.selfDisplayMode == "Hide" and UnitIsUnit("player", self.unit) then
self:Show(false)
return
end
self:Show(true)
local manaType = UnitPowerType(self.unit)
if (self.moduleSettings.scaleManaColor) then
self.color = "ScaledManaColor"
elseif self.moduleSettings.lowThresholdColor and self.manaPercentage and self.manaPercentage <= self.moduleSettings.lowThreshold then
self.color = "ScaledManaColor"
end
if (manaType == 1) then
self.color = "TargetTargetRage"
elseif (manaType == 2) then
self.color = "TargetTargetFocus"
elseif (manaType == 3) then
self.color = "TargetTargetEnergy"
elseif (manaType == 6) then
self.color = "TargetTargetRunicPower"
end
if (self.tapped) then
self.color = "Tapped"
end
TargetTargetMana.super.prototype.Update(self, unit)
end
-- Load us up
IceHUD.TargetTargetMana = TargetTargetMana:new()