local UnitDebuff, UnitIsCharmed = UnitDebuff, UnitIsCharmed;
local UnitPower, UnitPowerMax, UnitPowerType = UnitPower, UnitPowerMax, UnitPowerType;
local UnitHealth, UnitHealthMax = UnitHealth, UnitHealthMax;
+local UnitIsAFK, UnitIsDND = UnitIsAFK, UnitIsDND;
local UnitGetIncomingHeals, UnitGetTotalAbsorbs = UnitGetIncomingHeals, UnitGetTotalAbsorbs;
local UnitThreatSituation, GetThreatStatusColor = UnitThreatSituation, GetThreatStatusColor;
local UnitIsDeadOrGhost, UnitIsConnected = UnitIsDeadOrGhost, UnitIsConnected;
local UnitHasIncomingResurrection = UnitHasIncomingResurrection;
local UnitGetTotalHealAbsorbs = UnitGetTotalHealAbsorbs;
local UnitHasVehicleUI, UnitTargetsVehicleInRaidUI = UnitHasVehicleUI, UnitTargetsVehicleInRaidUI;
+local GetReadyCheckTimeLeft, GetReadyCheckStatus = GetReadyCheckTimeLeft, GetReadyCheckStatus;
local UnitGroupRolesAssigned = UnitGroupRolesAssigned;
local RAID_CLASS_COLORS = RAID_CLASS_COLORS;
+local READY_CHECK_READY_TEXTURE = READY_CHECK_READY_TEXTURE;
+local READY_CHECK_NOT_READY_TEXTURE = READY_CHECK_NOT_READY_TEXTURE;
+local READY_CHECK_WAITING_TEXTURE = READY_CHECK_WAITING_TEXTURE;
local checkIndicators = OmaRFIndicators.CheckIndicators;
local Settings = OmaRFSettings;
-local width = Settings.Character.Width;
local baseColor = Settings.BaseColor;
local overlayColorDispel = Settings.OverlayColorDispel;
local overlayColorCharm = Settings.OverlayColorCharm;
local overlayColorAlert = Settings.OverlayColorAlert;
local powerColors = Settings.PowerColors;
+local width = 10;
local M = {};
OmaRFEvents = M;
function M.RegisterEvents(frame)
-- events are taken from FrameXML/CompactUnitFrame.lua
- -- TODO ready check support, raid marker support,
- -- player flags support (/afk, /dnd)
+ -- 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_THREAT_SITUATION_UPDATE", 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);
end
local registerEvents = M.RegisterEvents;
local healthLost = max - current;
if UnitIsDeadOrGhost(unit) then
frame.text:SetText("Dead");
+ frame.text:Show();
elseif not UnitIsConnected(unit) then
frame.text:SetText("DC");
+ frame.text:Show();
+ elseif UnitIsAFK(unit) then
+ frame.text:SetText("afk");
+ frame.text:Show();
+ elseif UnitIsDND(unit) and healthLost == 0 then
+ frame.text:SetText("dnd");
+ frame.text:Show();
elseif healthLost > 0 then
if healthLost > 1200000000 then -- 1.2B
frame.text:SetFormattedText("-%.1fB", healthLost / 1000000000);
end
end
+local function updateReadyCheck(frame, unit)
+ local status = GetReadyCheckStatus(unit);
+ if status == "ready" then
+ frame.ready:SetTexture(READY_CHECK_READY_TEXTURE);
+ frame.ready:Show()
+ elseif status == "notready" then
+ frame.ready:SetTexture(READY_CHECK_NOT_READY_TEXTURE);
+ frame.ready:Show()
+ elseif status == "waiting" then
+ frame.ready:SetTexture(READY_CHECK_WAITING_TEXTURE);
+ frame.ready:Show()
+ else
+ frame.ready:Hide()
+ end
+end
+
local eventFuncs = {
["UNIT_HEALTH"] = function(frame)
updateHealth(frame, frame.displayed);
["PLAYER_ROLES_ASSIGNED"] = function(frame)
updateRole(frame, frame.unit);
end,
+ ["READY_CHECK"] = function(frame)
+ updateReadyCheck(frame, frame.unit);
+ end,
["UPDATE_ALL_BARS"] = function(frame)
updateVehicle(frame);
updateMaxHealth(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);
};
eventFuncs["UNIT_HEALTH_FREQUENT"] = eventFuncs["UNIT_HEALTH"];
eventFuncs["PARTY_MEMBER_DISABLE"] = eventFuncs["PARTY_MEMBER_ENABLE"];
+eventFuncs["PLAYER_FLAGS_CHANGED"] = eventFuncs["UNIT_CONNECTION"];
+eventFuncs["READY_CHECK_CONFIRM"] = eventFuncs["READY_CHECK"];
+eventFuncs["READY_CHECK_FINISHED"] = eventFuncs["READY_CHECK"];
eventFuncs["UNIT_ENTERED_VEHICLE"] = eventFuncs["UPDATE_ALL_BARS"];
eventFuncs["UNIT_EXITED_VEHICLE"] = eventFuncs["UPDATE_ALL_BARS"];
eventFuncs["UNIT_PET"] = eventFuncs["UPDATE_ALL_BARS"];
eventFuncs["GROUP_ROSTER_UPDATE"] = eventFuncs["UPDATE_ALL_BARS"];
+eventFuncs["PLAYER_ENTERING_WORLD"] = eventFuncs["UPDATE_ALL_BARS"];
+eventFuncs["PLAYER_FOCUS_CHANGED"] = eventFuncs["UPDATE_ALL_BARS"];
+
function M.UnitEvent(self, event)
eventFuncs[event](self);
end
+
+function M.LoadChar()
+ width = Settings.Character.Width;
+end