+-- Nameplates.lua
+local _;
+local next = next;
+local GetNamePlateForUnit = C_NamePlate.GetNamePlateForUnit;
+local UnitExists = UnitExists;
+local UnitAura = UnitAura;
+
+local main = CreateFrame("Frame", "OmaNameplateAuras");
+main:Hide();
+
+local frames = {};
+local unique = 1;
+local function createNameplate(parent)
+ local name = format("OmaPlate%i", unique);
+ local frame = CreateFrame("Frame", name, parent);
+ frames[parent] = frame;
+ unique = unique + 1;
+ frame:SetPoint("BOTTOM", parent, "TOP", 0, 14);
+ frame:SetWidth(32);
+ frame:SetHeight(32);
+ frame:Hide();
+ frame.base = frame:CreateTexture(nil, "BACKGROUND");
+ frame.base:SetAllPoints();
+ frame.base:SetColorTexture(0, 0, 0, 0.6);
+ frame.icon = frame:CreateTexture(nil, "ARTWORK");
+ frame.icon:SetPoint("TOPLEFT", frame.base, "TOPLEFT", 1, -1);
+ frame.icon:SetPoint("BOTTOMRIGHT", frame.base, "BOTTOMRIGHT", -1, 1);
+ frame.icon:SetTexCoord(0.07, 0.93, 0.07, 0.93);
+ frame.cd = CreateFrame("Cooldown", format("%sCD", name), frame, "CooldownFrameTemplate");
+ frame.cd:SetReverse(true);
+ frame.cd:SetHideCountdownNumbers(true);
+ frame.cd:SetAllPoints();
+ return frame;
+end
+
+local function setNameplate(unit)
+ local frame = frames[GetNamePlateForUnit(unit)];
+ -- TODO register interesting events to track on nameplates
+end
+
+local function unsetNameplate(unit)
+ local frame = frames[GetNamePlateForUnit(unit)];
+ frame:UnregisterAllEvents();
+ frame:Hide();
+end
+
+local events = {
+ ["NAME_PLATE_CREATED"] = createNameplate,
+ ["NAME_PLATE_UNIT_ADDED"] = setNameplate,
+ ["NAME_PLATE_UNIT_REMOVED"] = unsetNameplate,
+};
+main:SetScript("OnEvent", function(self, event)
+ main:UnregisterAllEvents();
+ main:SetScript("OnEvent", function(self, event, arg1)
+ events[event](arg1);
+ end);
+ main:RegisterEvent("NAME_PLATE_CREATED");
+ main:RegisterEvent("NAME_PLATE_UNIT_ADDED");
+ main:RegisterEvent("NAME_PLATE_UNIT_REMOVED");
+end);
+main:RegisterEvent("PLAYER_LOGIN");