end
if frame.raid or frame.unit ~= "player" then
frame:RegisterUnitEvent("UNIT_NAME_UPDATE", frame.unit, displayed);
+ frame:RegisterUnitEvent("UNIT_FACTION", frame.unit, displayed);
end
if frame.raid then
frame:RegisterUnitEvent("UNIT_THREAT_SITUATION_UPDATE", frame.unit, displayed);
local color = RAID_CLASS_COLORS[class];
if color then
if not frame.raid then
- if UnitIsEnemy("player", unit) then
- frame.health:SetVertexColor(1, 0, 0);
+ if not UnitPlayerControlled(unit) and UnitIsTapDenied(unit) then
+ frame.health:SetVertexColor(0.5, 0.5, 0.5);
elseif UnitIsPlayer(unit) then
frame.health:SetVertexColor(color.r, color.g, color.b);
- else
+ elseif UnitPlayerControlled(unit) then
frame.health:SetVertexColor(0, 1, 0);
+ else
+ frame.health:SetVertexColor(UnitSelectionColor(unit));
end
else
frame.name:SetVertexColor(color.r, color.g, color.b);
end
end
end,
+ ["UNIT_FACTION"] = function(frame)
+ updateName(frame, frame.unit);
+ end,
["PLAYER_ROLES_ASSIGNED"] = function(frame)
updateRole(frame, frame.unit);
end,
else
if UnitIsAFK(unit) then
frame.text.status = true;
+ frame.prev.htext = nil;
frame.text:SetText("afk");
if not frame.text:IsShown() then frame.text:Show() end
elseif UnitIsDND(unit) then
frame.text.status = true;
+ frame.prev.htext = nil;
frame.text:SetText("dnd");
if not frame.text:IsShown() then frame.text:Show() end
else
-- health
local current, hmax = UnitHealth(unit), UnitHealthMax(unit);
if frame.prev.health ~= current or frame.prev.hmax ~= hmax then
- if not frame.raid and not frame.text.status and frame.prev.htext ~= current then
- frame.prev.htext = current;
- if frame.boss then
- if hmax < current or hmax <= 1 then
- frame.text:SetText("100");
- if not frame.text:IsShown() then frame.text:Show() end
- elseif current <= 0 then
- if frame.text:IsShown() then frame.text:Hide() end
- else
- frame.text:SetFormattedText("%.1f", current/hmax*100);
- if not frame.text:IsShown() then frame.text:Show() end
- end
- else
- if current > 1000000000 then -- 1.0B
- frame.text:SetFormattedText("%.2fB", current / 1000000000);
- elseif current > 1000000 then -- 1.0M
- frame.text:SetFormattedText("%.2fM", current / 1000000);
- elseif current > 1000 then -- 1.0K
- frame.text:SetFormattedText("%.1fK", current / 1000);
- end
- if not frame.text:IsShown() then frame.text:Show() end
- end
- end
frame.prev.health = current;
frame.prev.hmax = hmax;
if hmax < current or hmax <= 1 then
if not frame.health:IsShown() then frame.health:Show() end
end
end
+ -- health text
+ if not frame.raid and not frame.text.status and frame.prev.htext ~= current then
+ frame.prev.htext = current;
+ if frame.boss then
+ if hmax < current or hmax <= 1 then
+ frame.text:SetText("100");
+ if not frame.text:IsShown() then frame.text:Show() end
+ elseif current <= 0 then
+ if frame.text:IsShown() then frame.text:Hide() end
+ else
+ frame.text:SetFormattedText("%.1f", current/hmax*100);
+ if not frame.text:IsShown() then frame.text:Show() end
+ end
+ else
+ if current > 1000000000 then -- 1.0B
+ frame.text:SetFormattedText("%.2fB", current / 1000000000);
+ elseif current > 1000000 then -- 1.0M
+ frame.text:SetFormattedText("%.2fM", current / 1000000);
+ elseif current > 1000 then -- 1.0K
+ frame.text:SetFormattedText("%.1fK", current / 1000);
+ end
+ if not frame.text:IsShown() then frame.text:Show() end
+ end
+ end
-- shield
local hwidth = frame.health.width;
current = UnitGetTotalAbsorbs(unit) or 0;
if frame.prev.mana ~= current or frame.prev.mmax ~= max then
frame.prev.mana = current;
frame.prev.mmax = max;
- if max < current or max <= 1 then
+ if max < 1 then
+ if frame.mana:IsShown() then frame.mana:Hide() end
+ if frame.manatext:IsShown() then frame.manatext:Hide() end
+ elseif max < current then
frame.mana:SetWidth(width);
frame.manatext:SetText("100");
if not frame.mana:IsShown() then frame.mana:Show() end