vanilla-wow-addons – Rev 1
?pathlinks?
local set = {name="players", internal = {}};
local eventframe;
local unitlocations = {};
local addpoint = function(name, unit)
YAPoints_AddMobilePoint(nil, name, unit, nil, nil);
YAPoints_SetupMobilePointF(nil, name, unit, "Icon","SetTexture",
"Interface\\AddOns\\Yatlas\\images\\Icons\\Icon-PartyUnit");
if(string.find(unit,"party")) then
YAPoints_SetupMobilePointF(nil, name, unit, "Icon","SetVertexColor",1,0.4,0.4,1);
elseif(string.find(unit,"raid")) then
YAPoints_SetupMobilePointF(nil, name, unit, "Icon","SetVertexColor",1,1,0.3,1);
else
YAPoints_SetupMobilePointF(nil, name, unit, "Icon","SetVertexColor",0.4,0.6,1,1);
end
YAPoints_SetupMobilePointF(nil, name, unit, "Icon","SetWidth",16);
YAPoints_SetupMobilePointF(nil, name, unit, "Icon","SetHeight",16);
YAPoints_SetupMobilePointF(nil, name, unit, "Icon","SetTexCoord",0,1,0,1);
YAPoints_SetupMobilePointF(nil, name, unit, "Icon","Show");
end
function set.getmobilepoints(name)
if(eventframe == nil) then
set.internal.CreateEventFrame();
end
addpoint(name, "player");
for h = 1,40 do
addpoint(name, "raid"..h);
end
for h = 1,5 do
addpoint(name, "party"..h);
end
end
function set.OnUpdate(name, frame, elapsed)
if(GetMapInfo() == frame.opt.Map) then
set.internal.OnWorldMapUpdate()
end
end
function set.internal.OnWorldMapUpdate()
set.internal.OnWorldMapUpdateUnit("player");
for h = 1,GetNumPartyMembers() do
set.internal.OnWorldMapUpdateUnit("party"..h);
end
for h = 1,GetNumRaidMembers() do
set.internal.OnWorldMapUpdateUnit("raid"..h);
end
end
function set.internal.OnWorldMapUpdateUnit(u)
local map = GetMapInfo();
local x,y = GetPlayerMapPosition(u);
local ux, uy;
if(x == 0 and y == 0 and unitlocations[u] and map == unitlocations[u][1]) then
-- assume we changed locations
unitlocations[u] = nil;
YAPoints_HideMobile("players", u);
return;
end
if(UnitIsUnit(u, "player") and u ~= "player") or
(UnitInParty(u) and string.sub(u, 1, 4) == "raid") then
-- hide other representations of units
if(unitlocations[u]) then
unitlocations[u] = nil;
YAPoints_HideMobile("players", u);
end
return;
end
if(Yatlas_mapareas[map] == nil or (x == 0 and y == 0)) then
return;
end
local x1,x2,y1,y2;
if(Yatlas_mapareas[map][0] ~= nil) then
x1 = Yatlas_mapareas[map][0][1];
x2 = Yatlas_mapareas[map][0][2];
y1 = Yatlas_mapareas[map][0][3];
y2 = Yatlas_mapareas[map][0][4];
else
local _,va = next(Yatlas_mapareas[map]);
x1 = va[1];
x2 = va[2];
y1 = va[3];
y2 = va[4];
end
ux, uy = Yatlas_Big2Mini_Coord((-x*(x1-x2) + x1), (-y*(y1-y2) + y1))
unitlocations[u] = { map, ux, uy};
YAPoints_Mobile_SetLocation("players", u, map, ux, uy);
end
function set.internal.CreateEventFrame()
if(eventframe ~= nil) then
return;
end
eventframe = CreateFrame("frame");
eventframe:SetScript("OnEvent", function()
if(event == "WORLD_MAP_UPDATE") then
set.internal.OnWorldMapUpdate();
elseif(event == "RAID_ROSTER_UPDATE" or event == "PARTY_MEMBERS_CHANGED") then
local q = {};
for h,v in pairs(unitlocations) do
if(not UnitExists(h)) then
tinsert(q,h);
end
end
for h,v in ipairs(q) do
unitlocations[v] = nil;
YAPoints_HideMobile("players", v);
end
end
end)
eventframe:RegisterEvent("WORLD_MAP_UPDATE");
eventframe:RegisterEvent("RAID_ROSTER_UPDATE");
eventframe:RegisterEvent("PARTY_MEMBERS_CHANGED");
end
function set.setuplegend(point, env, dat)
point:Show();
point.Text:SetText(UnitName(dat.name));
point.Icon:SetTexture(nil);
point.Text:Show();
point.Icon:SetHeight(env.iconsize);
point.Icon:SetWidth(env.iconsize);
end
YAPoints_RegisterSet(set);