local M = {};
OmaRFEvents = M;
function M.RegisterEvents(frame)
+ frame:RegisterEvent("PLAYER_ENTERING_WORLD");
+ frame:RegisterEvent("PLAYER_ROLES_ASSIGNED");
+ frame:RegisterEvent("READY_CHECK");
+ frame:RegisterEvent("READY_CHECK_FINISHED");
+ frame:RegisterEvent("PARTY_MEMBER_ENABLE");
+ frame:RegisterEvent("PARTY_MEMBER_DISABLE");
+ frame:RegisterEvent("GROUP_ROSTER_UPDATE");
+ if frame.unit == "focus" then frame:RegisterEvent("PLAYER_FOCUS_CHANGED") end
+end
+
+local function unregisterPower(frame)
+ frame.health:SetPoint("BOTTOMLEFT", frame.background, "BOTTOMLEFT");
+ frame.overlay:SetPoint("BOTTOMRIGHT", frame.background, "BOTTOMRIGHT");
+ frame.mana:Hide();
+ frame:UnregisterEvent("UNIT_POWER");
+ frame:UnregisterEvent("UNIT_MAXPOWER");
+ frame:UnregisterEvent("UNIT_DISPLAYPOWER");
+ frame:UnregisterEvent("UNIT_POWER_BAR_SHOW");
+ frame:UnregisterEvent("UNIT_POWER_BAR_HIDE");
+end
+
+local function registerPower(frame)
+ frame.health:SetPoint("BOTTOMLEFT", frame.background, "BOTTOMLEFT", 0, 2);
+ frame.overlay:SetPoint("BOTTOMRIGHT", frame.background, "BOTTOMRIGHT", 0, 2);
+ frame.mana:Show();
+ frame:RegisterUnitEvent("UNIT_POWER", frame.unit);
+ frame:RegisterUnitEvent("UNIT_MAXPOWER", frame.unit);
+ frame:RegisterUnitEvent("UNIT_DISPLAYPOWER", frame.unit);
+ frame:RegisterUnitEvent("UNIT_POWER_BAR_SHOW", frame.unit);
+ frame:RegisterUnitEvent("UNIT_POWER_BAR_HIDE", frame.unit);
+end
+
+function M.RegisterUnitEvents(frame)
-- events are taken from FrameXML/CompactUnitFrame.lua
-- TODO raid marker support
local displayed = frame.unit ~= frame.displayed and frame.displayed or nil;
frame:RegisterUnitEvent("UNIT_HEALTH", frame.unit, displayed);
frame:RegisterUnitEvent("UNIT_HEALTH_FREQUENT", frame.unit, displayed);
frame:RegisterUnitEvent("UNIT_MAXHEALTH", frame.unit, displayed);
- frame:RegisterUnitEvent("UNIT_POWER", frame.unit, displayed);
- frame:RegisterUnitEvent("UNIT_MAXPOWER", frame.unit, displayed);
- frame:RegisterUnitEvent("UNIT_DISPLAYPOWER", 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);
frame:RegisterUnitEvent("UNIT_CONNECTION", frame.unit, displayed);
frame:RegisterUnitEvent("INCOMING_RESURRECT_CHANGED", frame.unit, displayed);
frame:RegisterUnitEvent("PLAYER_FLAGS_CHANGED", frame.unit, displayed);
+ frame:RegisterUnitEvent("READY_CHECK_CONFIRM", frame.unit, displayed);
+ frame:RegisterUnitEvent("UNIT_ENTERED_VEHICLE", frame.unit, displayed);
+ frame:RegisterUnitEvent("UNIT_EXITED_VEHICLE", frame.unit, displayed);
+ frame:RegisterUnitEvent("UNIT_PET", frame.unit, displayed);
+ frame:RegisterUnitEvent("RAID_TARGET_UPDATE", frame.unit, displayed);
end
-local registerEvents = M.RegisterEvents;
+local registerUnitEvents = M.RegisterUnitEvents;
local function updateHealth(frame, unit)
local current, max = UnitHealth(unit), frame.health.max;
end
local function updateAuras(frame, unit)
- checkIndicators(frame, unit);
- if UnitDebuff(unit, 1, "RAID") ~= nil then
+ local alert = checkIndicators(frame, unit);
+ if alert then
+ if frame.overlay.color ~= overlayColorAlert then
+ frame.overlay:SetVertexColor(unpack(overlayColorAlert));
+ frame.overlay:Show();
+ frame.overlay.color = overlayColorAlert;
+ end
+ elseif UnitDebuff(unit, 1, "RAID") ~= nil then
-- something dispellable
if frame.overlay.color ~= overlayColorDispel then
frame.overlay:SetVertexColor(unpack(overlayColorDispel));
if not frame.inVehicle then
frame.inVehicle = true;
frame.displayed = frame.vehicle;
- registerEvents(frame);
+ registerUnitEvents(frame);
end
elseif frame.inVehicle then
frame.inVehicle = false;
frame.displayed = frame.unit;
- registerEvents(frame);
+ registerUnitEvents(frame);
end
end
if role == "HEALER" then
frame.role:SetTexCoord(0.75, 1, 0, 1);
frame.role:Show();
+ if not frame.role.healer then
+ registerPower(frame);
+ frame.role.healer = true;
+ end
elseif role == "TANK" then
frame.role:SetTexCoord(0.5, 0.75, 0, 1);
frame.role:Show();
+ if frame.role.healer then
+ unregisterPower(frame);
+ frame.role.healer = false;
+ end
else
frame.role:Hide();
+ if frame.role.healer then
+ unregisterPower(frame);
+ frame.role.healer = false;
+ end
end
end
end
end
+local function updateRaidMarker(frame, unit)
+ --print(unit, "marker");
+end
+
local eventFuncs = {
["UNIT_HEALTH"] = function(frame)
updateHealth(frame, frame.displayed);
updateShield(frame, frame.displayed);
updateHealAbsorb(frame, frame.displayed);
-- no heal prediction update, that doesn't overflow too much
+ -- raid marker update here, because marker is removed when unit dies
+ -- without a RAID_TARGET_UPDATE event
+ updateRaidMarker(frame, frame.unit);
end,
["UNIT_POWER"] = function(frame)
updatePower(frame, frame.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);
["READY_CHECK"] = function(frame)
updateReadyCheck(frame, frame.unit);
end,
+ ["RAID_TARGET_UPDATE"] = function(frame)
+ updateRaidMarker(frame, frame.unit);
+ end,
["UPDATE_ALL_BARS"] = function(frame)
+ updateRole(frame, frame.unit);
updateVehicle(frame);
updateMaxHealth(frame, frame.displayed);
updateMaxPower(frame, frame.displayed);
updateHealPred(frame, frame.displayed);
updateHealAbsorb(frame, frame.displayed);
updatePowerColor(frame, frame.displayed);
- updateIncomingRes(frame, frame.unit);
- updateReadyCheck(frame, frame.unit);
updateAggro(frame, frame.displayed);
updateName(frame, frame.displayed);
- updateRole(frame, frame.unit);
+ updateIncomingRes(frame, frame.unit);
+ updateReadyCheck(frame, frame.unit);
+ updateRaidMarker(frame, frame.unit);
end,
};
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"];