Power bars didn't update properly when they changed for the same unit.
For example druid shapeshift.
frame:RegisterUnitEvent("UNIT_POWER", frame.unit, displayed);
frame:RegisterUnitEvent("UNIT_MAXPOWER", frame.unit, displayed);
frame:RegisterUnitEvent("UNIT_DISPLAYPOWER", frame.unit, displayed);
+ frame:RegisterUnitEvent("UNIT_POWER_BAR_SHOW", frame.unit, displayed);
+ frame:RegisterUnitEvent("UNIT_POWER_BAR_HIDE", frame.unit, displayed);
frame:RegisterUnitEvent("UNIT_NAME_UPDATE", frame.unit, displayed);
frame:RegisterUnitEvent("UNIT_AURA", frame.unit, displayed);
frame:RegisterUnitEvent("UNIT_HEAL_PREDICTION", frame.unit, displayed);
end,
["UNIT_DISPLAYPOWER"] = function(frame)
updatePowerColor(frame, frame.displayed);
+ updateMaxPower(frame, frame.displayed);
+ updatePower(frame, frame.displayed);
end,
["UNIT_NAME_UPDATE"] = function(frame)
updateName(frame, frame.displayed);
eventFuncs["UNIT_HEALTH_FREQUENT"] = eventFuncs["UNIT_HEALTH"];
eventFuncs["PARTY_MEMBER_DISABLE"] = eventFuncs["PARTY_MEMBER_ENABLE"];
eventFuncs["PLAYER_FLAGS_CHANGED"] = eventFuncs["UNIT_CONNECTION"];
+eventFuncs["UNIT_POWER_BAR_SHOW"] = eventFuncs["UNIT_DISPLAYPOWER"];
+eventFuncs["UNIT_POWER_BAR_HIDE"] = eventFuncs["UNIT_DISPLAYPOWER"];
eventFuncs["READY_CHECK_CONFIRM"] = eventFuncs["READY_CHECK"];
eventFuncs["READY_CHECK_FINISHED"] = eventFuncs["READY_CHECK"];
eventFuncs["UNIT_ENTERED_VEHICLE"] = eventFuncs["UPDATE_ALL_BARS"];
local Settings = OmaUFSettings;
local baseColor = Settings.BaseColor;
local healthColor = Settings.HealthColor;
-local overlayColorDispel = Settings.OverlayColorDispel;
-local overlayColorCharm = Settings.OverlayColorCharm;
-local overlayColorAlert = Settings.OverlayColorAlert;
local powerColors = Settings.PowerColors;
local width = Settings.Width;
frame:RegisterUnitEvent("UNIT_POWER", frame.unit, displayed);
frame:RegisterUnitEvent("UNIT_MAXPOWER", frame.unit, displayed);
frame:RegisterUnitEvent("UNIT_DISPLAYPOWER", frame.unit, displayed);
+ frame:RegisterUnitEvent("UNIT_POWER_BAR_SHOW", frame.unit, displayed);
+ frame:RegisterUnitEvent("UNIT_POWER_BAR_HIDE", frame.unit, displayed);
frame:RegisterUnitEvent("UNIT_NAME_UPDATE", frame.unit, displayed);
frame:RegisterUnitEvent("UNIT_AURA", frame.unit, displayed);
frame:RegisterUnitEvent("UNIT_HEAL_PREDICTION", frame.unit, displayed);
local function updateAuras(frame, unit)
updateAuraFrames(frame, unit);
- if UnitIsFriend("player", unit) and UnitDebuff(unit, 1, "RAID") ~= nil then
- -- something dispellable
- if frame.overlay.color ~= overlayColorDispel then
- frame.overlay:SetVertexColor(unpack(overlayColorDispel));
- frame.overlay:Show();
- frame.overlay.color = overlayColorDispel;
- end
- -- don't overlay charmed when in vehicle
- elseif UnitIsCharmed(unit) and not frame.inVehicle then
- if frame.overlay.color ~= overlayColorCharm then
- frame.overlay:SetVertexColor(unpack(overlayColorCharm));
- frame.overlay:Show();
- frame.overlay.color = overlayColorCharm;
- end
- else
- if frame.overlay.color ~= nil then
- frame.overlay:Hide();
- frame.overlay.color = nil;
- end
- end
end
local function updateAggro(frame, unit)
end,
["UNIT_DISPLAYPOWER"] = function(frame)
updatePowerColor(frame, frame.displayed);
+ updateMaxPower(frame, frame.displayed);
+ updatePower(frame, frame.displayed);
+ updatePowerText(frame, frame.displayed);
end,
["UNIT_NAME_UPDATE"] = function(frame)
updateName(frame, frame.displayed);
end,
};
eventFuncs["UNIT_HEALTH_FREQUENT"] = eventFuncs["UNIT_HEALTH"];
+eventFuncs["UNIT_POWER_BAR_SHOW"] = eventFuncs["UNIT_DISPLAYPOWER"];
+eventFuncs["UNIT_POWER_BAR_HIDE"] = eventFuncs["UNIT_DISPLAYPOWER"];
eventFuncs["UNIT_ENTERED_VEHICLE"] = eventFuncs["UPDATE_ALL_BARS"];
eventFuncs["UNIT_EXITED_VEHICLE"] = eventFuncs["UPDATE_ALL_BARS"];
eventFuncs["UNIT_PET"] = eventFuncs["UPDATE_ALL_BARS"];
ShieldhlColor = {0.5, 0.8, 1},
HealpredColor = {0.5, 0.6, 0.5},
HealabsorbColor = {0.1, 0.1, 0.1},
- OverlayColorDispel = {1, 0.5, 0, 0.5},
- OverlayColorCharm = {0.8, 0, 1, 0.5},
- OverlayColorAlert = {1, 0, 0, 0.5},
PowerColors = {
[PowerTypeMana] = {0, 0.5, 1},
[PowerTypeRage] = {1, 0, 0},
frame.healabsorb:SetPoint("BOTTOMRIGHT", frame.health, "BOTTOMRIGHT");
frame.healabsorb:SetColorTexture(unpack(healabsorbColor));
frame.healabsorb:Hide();
- frame.overlay = frame:CreateTexture(nil, "ARTWORK", nil, 1);
- frame.overlay:SetPoint("TOPLEFT", frame.healthback, "TOPLEFT");
- frame.overlay:SetPoint("BOTTOMRIGHT", frame.healthback, "BOTTOMRIGHT");
- frame.overlay:SetColorTexture(1, 1, 1);
- frame.overlay:Hide();
frame.role = frame:CreateTexture(nil, "OVERLAY");
frame.role:SetPoint("TOPLEFT", frame.healthback, "TOPRIGHT", -8, 8);
frame.role:SetPoint("BOTTOMRIGHT", frame.healthback, "TOPRIGHT", 8, -8);