# LibGetFrame Return unit frame for a given unit ## Usage ```Lua local LGF = LibStub("LibGetFrame-1.0") local frame = LGF.GetUnitFrame(unit , options) local callback = function(event, frame, unit) if event == "GETFRAME_REFRESH" then -- cache was refreshed end if event == "FRAME_UNIT_UPDATE" then -- 'frame' was updated and is now a match for 'unit' end if event == "FRAME_UNIT_REMOVED" then -- 'frame' was updated and is no longer a match for 'unit' end end LGF.RegisterCallback("MyAddonName", "GETFRAME_REFRESH", callback) LGF.RegisterCallback("MyAddonName", "FRAME_UNIT_UPDATE", callback) LGF.RegisterCallback("MyAddonName", "FRAME_UNIT_REMOVED", callback) ``` ## Public functions ```Lua LGF:GetUnitFrame(unit, options) ``` Options: - framePriorities : array - ignorePlayerFrame : boolean (default true) - ignoreTargetFrame : boolean (default true) - ignoreTargettargetFrame : boolean (default true) - ignorePartyFrame : boolean (default false) - ignorePartyTargetFrame : boolean (default true) - ignoreRaidFrame : boolean (default false) - playerFrames : array - targetFrames : array - targettargetFrames : array - partyFrames : array - partyTargetFrames : array - raidFrames : array - ignoreFrames : array - returnAll : boolean (default false) If returnAll is false, GetUnitFrame will return a single best match For arrays check LibGetFrame-1.0.lua code for defaults ```Lua LGF:ScanForUnitFrames() ``` Ask lib to do a new scan of frames. This scan can take a few frames to be completed. You should not expect the cache use by LGF:GetUnitFrame to be updated in the same frame as this ScanForUnitFrames call. Use lib's callbacks to know when the cache is refresh. ```Lua LGF:GetUnitNameplate(unit) ``` Return health bar for a nameplate unit, works with a variety of addons ## Callbacks ```Lua -- Fired after a scan complete and cache refreshed LGF.RegisterCallback("MyAddonName", "GETFRAME_REFRESH", function(event) end) ``` ```Lua -- Fired when a frame is a new match for a unit (it does not test if it is the BEST match!) LGF.RegisterCallback("MyAddonName", "FRAME_UNIT_UPDATE", function(event, frame, unit) end) ``` ```Lua -- Fired when a frame is not a new match for a unit anymore LGF.RegisterCallback("MyAddonName", "FRAME_UNIT_REMOVED", function(event, frame, unit) end) ``` ## Examples ### Glow player frame ```Lua local LGF = LibStub("LibGetFrame-1.0") local LCG = LibStub("LibCustomGlow-1.0") local frame = LGF.GetUnitFrame("player") if frame then LCG.ButtonGlow_Start(frame) -- LCG.ButtonGlow_Stop(frame) end ``` ### Glow every frames for your target ```Lua local LGF = LibStub("LibGetFrame-1.0") local LCG = LibStub("LibCustomGlow-1.0") local frames = LGF.GetUnitFrame("target", { ignorePlayerFrame = false, ignoreTargetFrame = false, ignoreTargettargetFrame = false, returnAll = true, }) for _, frame in pairs(frames) do LCG.ButtonGlow_Start(frame) --LCG.ButtonGlow_Stop(frame) end ``` ### Ignore Vuhdo panel 2 and 3 ```Lua local frame = LGF.GetUnitFrame("player", { ignoreFrames = { "Vd2.*", "Vd3.*" } }) ``` ### Glow specific units and update glow when frames changes ```Lua local LGF = LibStub("LibGetFrame-1.0") local LCG = LibStub("LibCustomGlow-1.0") -- list of units i want glowing local glow_units = { player = true } -- track which frame is glowing per unit local glow_unit_frames = {} -- glow them using current cache for unit in pairs(glow_units) do local frame = LGF.GetUnitFrame("player") if frame then LCG.ButtonGlow_Start(frame) glow_unit_frames[unit] = frame end end local callback = function(event, frame, unit) if not glow_units[unit] then return end -- new match for GetUnitFrame(unit), check if it's different from previous "best match" returned local new_best_match = LGF.GetUnitFrame(unit) if new_best_match == nil then -- didn't found a best match for this unit if glow_unit_frames[unit] then -- stop previous glow LCG.ButtonGlow_Stop(glow_unit_frames[unit]) glow_unit_frames[unit] = nil end elseif new_best_match ~= glow_unit_frames[unit] then -- best match found, but different from previous one if glow_unit_frames[unit] then -- stop previous glow LCG.ButtonGlow_Stop(glow_unit_frames[unit]) end LCG.ButtonGlow_Start(new_best_match) glow_unit_frames[unit] = new_best_match end end LGF.RegisterCallback("MyAddonName", "FRAME_UNIT_UPDATE", callback) LGF.RegisterCallback("MyAddonName", "FRAME_UNIT_REMOVED", callback) ``` [GitHub Project](https://github.com/mrbuds/LibGetFrame)