d3c8a9bf3e
Arguments might still shut be shared from the original call for custom auras. More functions need to be added to prototypes. Documentation is needed soon.
150 lines
4.4 KiB
Lua
150 lines
4.4 KiB
Lua
if not WeakAuras.IsLibsOK() then return end
|
|
|
|
local AddonName, Private = ...
|
|
|
|
-- Lua APIs
|
|
local unpack = unpack
|
|
|
|
-- WoW APIs
|
|
local UnitName, UnitIsUnit, UnitClass, GetNumGroupMembers = UnitName, UnitIsUnit, UnitClass, GetNumGroupMembers
|
|
|
|
local nameToGlyphs = {}
|
|
local nameToSpecMap = {}
|
|
local nameToUnitMap = {
|
|
[UnitName("player")] = "player"
|
|
}
|
|
|
|
local subscribers = {}
|
|
|
|
Private.LibGroupTalentsWrapper = {
|
|
Register = function(callback) end,
|
|
SpecForUnit = function(unit) end,
|
|
SpecRolePositionForUnit = function(unit) end,
|
|
CheckTalentForUnit = function(unit, talentId) end,
|
|
CheckGlyphForUnit = function(unit, glyphId) end,
|
|
}
|
|
|
|
local LibGroupTalents = LibStub("LibGroupTalents-1.0")
|
|
if LibGroupTalents then
|
|
--- LibGroupTalents callback for talents and glyphs
|
|
function Private.LibGroupTalentsWrapper:LibGroupTalentsCallback(_, _, unit)
|
|
if not unit then
|
|
return
|
|
end
|
|
|
|
local unitName = UnitName(unit)
|
|
local ownName = UnitName("player")
|
|
|
|
local numMembers = GetNumGroupMembers()
|
|
local units
|
|
if IsInRaid() then
|
|
units = WeakAuras.raidUnits
|
|
else
|
|
units = WeakAuras.partyUnits
|
|
end
|
|
|
|
for i = 1, numMembers do
|
|
local groupUnit = units[i]
|
|
if groupUnit then
|
|
local groupUnitName = UnitName(groupUnit)
|
|
if groupUnitName then
|
|
nameToUnitMap[groupUnitName] = groupUnit
|
|
end
|
|
end
|
|
end
|
|
nameToUnitMap[ownName] = "player"
|
|
|
|
for storedName in pairs(nameToSpecMap) do
|
|
if not nameToUnitMap[storedName] then
|
|
nameToSpecMap[storedName] = nil
|
|
nameToGlyphs[storedName] = nil
|
|
end
|
|
end
|
|
|
|
local specInfo = { LibGroupTalents:GetUnitTalentSpec(unit) }
|
|
local class = select(2, UnitClass(unit))
|
|
if specInfo and #specInfo > 0 and class then
|
|
nameToSpecMap[unitName] = class .. specInfo[1]
|
|
end
|
|
|
|
local glyphs = { LibGroupTalents:GetUnitGlyphs(unit) }
|
|
if glyphs and #glyphs > 0 then
|
|
nameToGlyphs[unitName] = {}
|
|
for _, glyphId in ipairs(glyphs) do
|
|
nameToGlyphs[unitName][glyphId] = true
|
|
end
|
|
end
|
|
|
|
if nameToUnitMap[unitName] then
|
|
for _, f in ipairs(subscribers) do
|
|
f(nameToUnitMap[unitName])
|
|
end
|
|
end
|
|
end
|
|
|
|
LibGroupTalents.RegisterCallback(Private.LibGroupTalentsWrapper, "LibGroupTalents_Update", "LibGroupTalentsCallback")
|
|
|
|
function Private.LibGroupTalentsWrapper.Register(f)
|
|
table.insert(subscribers, f)
|
|
end
|
|
|
|
function Private.LibGroupTalentsWrapper.SpecForUnit(unit)
|
|
local unitName = UnitName(unit)
|
|
local class = select(2, UnitClass(unit))
|
|
|
|
if nameToSpecMap[unitName] then
|
|
return nameToSpecMap[unitName]
|
|
end
|
|
|
|
if UnitIsUnit(unit, "player") and class then
|
|
local specInfo = LibGroupTalents:GetUnitTalentSpec(unit)
|
|
if specInfo and #specInfo > 0 then
|
|
return class .. specInfo[1]
|
|
end
|
|
end
|
|
end
|
|
|
|
function Private.LibGroupTalentsWrapper.SpecRolePositionForUnit(unit)
|
|
local data = nameToSpecMap[UnitName(unit)]
|
|
if data then
|
|
return unpack(data)
|
|
end
|
|
|
|
if UnitIsUnit(unit, "player") then
|
|
return LibGroupTalents:GetUnitTalentSpec(unit)
|
|
end
|
|
end
|
|
|
|
function Private.LibGroupTalentsWrapper.CheckTalentForUnit(unit, talentId)
|
|
return UnitIsUnit(unit, "player") and LibGroupTalents:UnitHasTalent(unit, talentId) and true or false
|
|
end
|
|
|
|
function Private.LibGroupTalentsWrapper.CheckGlyphForUnit(unit, glyphId)
|
|
local unitName = UnitName(unit)
|
|
if nameToGlyphs[unitName] and nameToGlyphs[unitName][glyphId] then
|
|
return true
|
|
end
|
|
|
|
if UnitIsUnit(unit, "player") then
|
|
local glyphs = { LibGroupTalents:GetUnitGlyphs(unit) }
|
|
for _, id in ipairs(glyphs) do
|
|
if id == glyphId then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
else
|
|
function Private.LibGroupTalentsWrapper.Register(f) end
|
|
function Private.LibGroupTalentsWrapper.SpecForUnit(unit) return nil end
|
|
function Private.LibGroupTalentsWrapper.SpecRolePositionForUnit(unit) return nil end
|
|
function Private.LibGroupTalentsWrapper.CheckTalentForUnit(unit) return nil end
|
|
function Private.LibGroupTalentsWrapper.CheckGlyphForUnit(unit) return nil end
|
|
end
|
|
|
|
-- Export for GenericTrigger
|
|
WeakAuras.SpecForUnit = Private.LibGroupTalentsWrapper.SpecForUnit
|
|
WeakAuras.SpecRolePositionForUnit = Private.LibGroupTalentsWrapper.SpecRolePositionForUnit
|
|
WeakAuras.CheckTalentForUnit = Private.LibGroupTalentsWrapper.CheckTalentForUnit
|
|
WeakAuras.CheckGlyphForUnit = Private.LibGroupTalentsWrapper.CheckGlyphForUnit
|