mirror of
https://github.com/parnic/ice-hud.git
synced 2025-06-16 06:40:13 -05:00
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.
166 lines
4.9 KiB
Lua
166 lines
4.9 KiB
Lua
local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
|
|
local TargetTargetHealth = IceCore_CreateClass(IceTargetHealth)
|
|
TargetTargetHealth.prototype.scheduledEvent = nil
|
|
|
|
local SelfDisplayModeOptions = {"Color as SelfColor", "Hide", "Normal"}
|
|
|
|
|
|
-- Constructor --
|
|
function TargetTargetHealth.prototype:init()
|
|
TargetTargetHealth.super.prototype.init(self, "TargetTargetHealth", "targettarget")
|
|
|
|
self:SetDefaultColor("TargetTargetHealthHostile", 231, 31, 36)
|
|
self:SetDefaultColor("TargetTargetHealthFriendly", 46, 223, 37)
|
|
self:SetDefaultColor("TargetTargetHealthNeutral", 210, 219, 87)
|
|
self:SetDefaultColor("SelfColor", 255, 255, 255)
|
|
end
|
|
|
|
function TargetTargetHealth.prototype:GetDefaultSettings()
|
|
local settings = TargetTargetHealth.super.prototype.GetDefaultSettings(self)
|
|
|
|
settings["side"] = IceCore.Side.Right
|
|
settings["offset"] = 12
|
|
settings["classColor"] = false
|
|
settings["selfColor"] = { r = 0, g = 0, b = 1 }
|
|
settings["selfDisplayMode"] = "Color as SelfColor"
|
|
settings["upperText"] = "[PercentHP:Round]"
|
|
settings["lowerText"] = "[FractionalHP:Short:HPColor:Bracket]"
|
|
settings["barVerticalOffset"] = 35
|
|
settings["scale"] = 0.7
|
|
settings["enabled"] = false
|
|
settings["hideBlizz"] = false
|
|
|
|
return settings
|
|
end
|
|
|
|
|
|
-- OVERRIDE
|
|
function TargetTargetHealth.prototype:GetOptions()
|
|
local opts = TargetTargetHealth.super.prototype.GetOptions(self)
|
|
|
|
opts["hideBlizz"] = nil
|
|
|
|
opts["selfDisplayMode"] = {
|
|
type = 'select',
|
|
name = L["Self Display Mode"],
|
|
desc = L["What this bar should do whenever the player is the TargetOfTarget\n\nNOTE: When this is set to 'hide', then click-targeting is not available due to Blizzard's restrictions"],
|
|
get = function(info)
|
|
return IceHUD:GetSelectValue(info, self.moduleSettings.selfDisplayMode)
|
|
end,
|
|
set = function(info, value)
|
|
self.moduleSettings.selfDisplayMode = info.option.values[value]
|
|
if info.option.values[value] == "Hide" then
|
|
self.moduleSettings.allowMouseInteraction = false
|
|
self.DisplayClickTargetOption = false
|
|
UnregisterUnitWatch(self.frame)
|
|
else
|
|
RegisterUnitWatch(self.frame)
|
|
self.DisplayClickTargetOption = true
|
|
end
|
|
IceHUD:NotifyOptionsChange()
|
|
self:Redraw()
|
|
end,
|
|
disabled = function()
|
|
return not self.moduleSettings.enabled
|
|
end,
|
|
values = SelfDisplayModeOptions,
|
|
order = 44,
|
|
}
|
|
|
|
opts["selfColor"] = {
|
|
type = "color",
|
|
name = L["Self Color"],
|
|
desc = L["Set the color of the TargetTarget bar if you are your target's target."],
|
|
get = function()
|
|
return self.moduleSettings.selfColor.r, self.moduleSettings.selfColor.g, self.moduleSettings.selfColor.b
|
|
end,
|
|
set = function(info, r, g, b)
|
|
self.moduleSettings.selfColor = { r = r, g = g, b = b }
|
|
IceHUD.IceCore:SetColor("SelfColor", r, g, b)
|
|
end,
|
|
disabled = function()
|
|
return not self.moduleSettings.enabled
|
|
end,
|
|
hasAlpha = false,
|
|
order = 45,
|
|
}
|
|
|
|
return opts
|
|
end
|
|
|
|
|
|
function TargetTargetHealth.prototype:Enable(core)
|
|
self.registerEvents = false
|
|
TargetTargetHealth.super.prototype.Enable(self, core)
|
|
|
|
if self.moduleSettings.selfDisplayMode == "Hide" then
|
|
UnregisterUnitWatch(self.frame)
|
|
self.DisplayClickTargetOption = false
|
|
self.moduleSettings.allowMouseInteraction = false
|
|
self:EnableClickTargeting(false)
|
|
end
|
|
|
|
if self.moduleSettings.useSelfColor ~= nil then
|
|
if self.moduleSettings.useSelfColor == true then
|
|
self.moduleSettings.selfDisplayMode = "Color as SelfColor"
|
|
else
|
|
self.moduleSettings.selfDisplayMode = "Normal"
|
|
end
|
|
|
|
self.moduleSettings.useSelfColor = nil
|
|
end
|
|
|
|
self.scheduledEvent = self:ScheduleRepeatingTimer("Update", 0.1, "targettarget")
|
|
end
|
|
|
|
function TargetTargetHealth.prototype:Disable(core)
|
|
TargetTargetHealth.super.prototype.Disable(self, core)
|
|
|
|
self:CancelTimer(self.scheduledEvent, true)
|
|
end
|
|
|
|
function TargetTargetHealth.prototype:Update(unit)
|
|
self.color = "TargetTargetHealthFriendly" -- friendly > 4
|
|
|
|
local reaction = UnitReaction(self.unit, "player")
|
|
|
|
if (reaction and (reaction == 4)) then
|
|
self.color = "TargetTargetHealthNeutral"
|
|
elseif (reaction and (reaction < 4)) then
|
|
self.color = "TargetTargetHealthHostile"
|
|
end
|
|
|
|
if (self.moduleSettings.classColor) then
|
|
self.color = self.unitClass
|
|
end
|
|
|
|
if (self.moduleSettings.scaleHealthColor) then
|
|
self.color = "ScaledHealthColor"
|
|
elseif self.moduleSettings.lowThresholdColor and self.healthPercentage and self.healthPercentage <= self.moduleSettings.lowThreshold then
|
|
self.color = "ScaledHealthColor"
|
|
end
|
|
|
|
if (self.tapped) then
|
|
self.color = "Tapped"
|
|
end
|
|
|
|
if UnitIsUnit("player", self.unit) then
|
|
if self.moduleSettings.selfDisplayMode == "Color as SelfColor" then
|
|
self.color = "SelfColor"
|
|
elseif self.moduleSettings.selfDisplayMode == "Hide" then
|
|
self:Show(false)
|
|
return
|
|
end
|
|
end
|
|
|
|
if self.moduleSettings.selfDisplayMode == "Hide" then
|
|
self:Show(UnitExists(self.unit))
|
|
end
|
|
|
|
self.determineColor = false
|
|
TargetTargetHealth.super.prototype.Update(self, unit)
|
|
end
|
|
|
|
-- Load us up
|
|
IceHUD.TargetTargetHealth = TargetTargetHealth:new()
|