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.
63 lines
2.7 KiB
63 lines
2.7 KiB
|
4 years ago
|
local Empty = {}
|
||
|
|
local fallbackColor
|
||
|
|
ShadowUF:RegisterModule(Empty, "emptyBar", ShadowUF.L["Empty bar"], true)
|
||
|
|
|
||
|
|
function Empty:OnEnable(frame)
|
||
|
|
frame.emptyBar = frame.emptyBar or ShadowUF.Units:CreateBar(frame)
|
||
|
|
frame.emptyBar:SetMinMaxValues(0, 1)
|
||
|
|
frame.emptyBar:SetValue(0)
|
||
|
|
|
||
|
|
fallbackColor = fallbackColor or {r = 0, g = 0, b = 0}
|
||
|
|
end
|
||
|
|
|
||
|
|
function Empty:OnDisable(frame)
|
||
|
|
frame:UnregisterAll(self)
|
||
|
|
end
|
||
|
|
|
||
|
|
function Empty:OnLayoutApplied(frame)
|
||
|
|
if( frame.visibility.emptyBar ) then
|
||
|
|
local color = frame.emptyBar.background.overrideColor or fallbackColor
|
||
|
|
frame.emptyBar.background:SetVertexColor(color.r, color.g, color.b, ShadowUF.db.profile.bars.alpha)
|
||
|
|
|
||
|
|
if( ShadowUF.db.profile.units[frame.unitType].emptyBar.reactionType or ShadowUF.db.profile.units[frame.unitType].emptyBar.class ) then
|
||
|
|
frame:RegisterUnitEvent("UNIT_FACTION", self, "UpdateColor")
|
||
|
|
frame:RegisterUpdateFunc(self, "UpdateColor")
|
||
|
|
else
|
||
|
|
self:OnDisable(frame)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function Empty:UpdateColor(frame)
|
||
|
|
local color
|
||
|
|
local reactionType = ShadowUF.db.profile.units[frame.unitType].emptyBar.reactionType
|
||
|
|
|
||
|
|
if( ( reactionType == "npc" or reactionType == "both" ) and not UnitPlayerControlled(frame.unit) and UnitIsTapDenied(frame.unit) and UnitCanAttack("player", frame.unit) ) then
|
||
|
|
color = ShadowUF.db.profile.healthColors.tapped
|
||
|
|
elseif( not UnitPlayerOrPetInRaid(frame.unit) and not UnitPlayerOrPetInParty(frame.unit) and ( ( ( reactionType == "player" or reactionType == "both" ) and UnitIsPlayer(frame.unit) and not UnitIsFriend(frame.unit, "player") ) or ( ( reactionType == "npc" or reactionType == "both" ) and not UnitIsPlayer(frame.unit) ) ) ) then
|
||
|
|
if( not UnitIsFriend(frame.unit, "player") and UnitPlayerControlled(frame.unit) ) then
|
||
|
|
if( UnitCanAttack("player", frame.unit) ) then
|
||
|
|
color = ShadowUF.db.profile.healthColors.hostile
|
||
|
|
else
|
||
|
|
color = ShadowUF.db.profile.healthColors.enemyUnattack
|
||
|
|
end
|
||
|
|
elseif( UnitReaction(frame.unit, "player") ) then
|
||
|
|
local reaction = UnitReaction(frame.unit, "player")
|
||
|
|
if( reaction > 4 ) then
|
||
|
|
color = ShadowUF.db.profile.healthColors.friendly
|
||
|
|
elseif( reaction == 4 ) then
|
||
|
|
color = ShadowUF.db.profile.healthColors.neutral
|
||
|
|
elseif( reaction < 4 ) then
|
||
|
|
color = ShadowUF.db.profile.healthColors.hostile
|
||
|
|
end
|
||
|
|
end
|
||
|
|
elseif( ShadowUF.db.profile.units[frame.unitType].emptyBar.class and ( UnitIsPlayer(frame.unit) or UnitCreatureFamily(frame.unit) ) ) then
|
||
|
|
local class = UnitCreatureFamily(frame.unit) or frame:UnitClassToken()
|
||
|
|
color = class and ShadowUF.db.profile.classColors[class]
|
||
|
|
end
|
||
|
|
|
||
|
|
color = color or frame.emptyBar.background.overrideColor or fallbackColor
|
||
|
|
frame.emptyBar.background:SetVertexColor(color.r, color.g, color.b, ShadowUF.db.profile.bars.alpha)
|
||
|
|
end
|
||
|
|
|