From ad0f769715cb79b653ab347a9a28bec7dfc07074 Mon Sep 17 00:00:00 2001 From: shagu Date: Sun, 14 Jun 2020 19:53:00 +0200 Subject: [PATCH] mapcolors: module to show class colored circles --- img/circleparty.tga | Bin 0 -> 804 bytes img/circleraid.tga | Bin 0 -> 660 bytes init/modules.xml | 1 + modules/mapcolors.lua | 78 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 79 insertions(+) create mode 100644 img/circleparty.tga create mode 100644 img/circleraid.tga create mode 100644 modules/mapcolors.lua diff --git a/img/circleparty.tga b/img/circleparty.tga new file mode 100644 index 0000000000000000000000000000000000000000..9634f9ffb07ae4fb047223f83c299a8ba1906dff GIT binary patch literal 804 zcmbu7L5jja5JfAJg}8D(D=#o}g{%|;GJ?(wlG_9kvlqOAn~-ya93cDbbAhaC>Xq$M z(D?@R z!e~?!g*Hv2dEfUMk->Nk^);v^wgj-5W?80nUF%T|F&PY%psB?)R|EsD z27!6E=hbyI)djkNezKwNjwTAU59b5T?0S;-lx7D%HTUDV=mz`aVHjxdqksMTkO + diff --git a/modules/mapcolors.lua b/modules/mapcolors.lua new file mode 100644 index 00000000..8482704f --- /dev/null +++ b/modules/mapcolors.lua @@ -0,0 +1,78 @@ +-- adds class colored circles on world and battlefield map +pfUI:RegisterModule("mapcolors", function () + local mapcolors = CreateFrame("Frame", nil, UIParent) + mapcolors:SetScript("OnUpdate", function() + -- throttle to to one item per .1 second + if ( this.tick or 1) > GetTime() then return else this.tick = GetTime() + .1 end + + local frame, icon + + -- initialize all button names + if not this.buttons then + this.buttons = {} + + for i = 1, 4 do + icon = string.format("WorldMapParty%d", i) + this.buttons[icon] = string.format("party%d", i) + end + + for i = 1, 4 do + icon = string.format("BattlefieldMinimapParty%d", i) + this.buttons[icon] = string.format("party%d", i) + end + + for i = 1, 40 do + icon = string.format("BattlefieldMinimapRaid%d", i) + this.buttons[icon] = string.format("raid%d", i) + end + + for i = 1, 40 do + icon = string.format("WorldMapRaid%d", i) + this.buttons[icon] = string.format("raid%d", i) + end + end + + -- update all available buttons + local ingroup + for name, unitstr in pairs(this.buttons) do + frame = _G[name] + + if frame and UnitExists(unitstr) then + icon = _G[name.."Icon"] + icon:SetTexture() + + -- create icon if not yet existing + if not frame.pfIcon then + frame.pfIcon = frame:CreateTexture(nil, "OVERLAY") + SetAllPointsOffset(frame.pfIcon, frame, 3, -3) + end + + -- check if unit is in same group + ingroup = nil + for i=1,5 do -- check if unit is in group + if UnitName(string.format("party%d", i)) == UnitName(unitstr) then + ingroup = true + end + end + + -- update texture according to raid/group state + if ingroup and frame.pfIcon.ingroup ~= "PARTY" then + frame.pfIcon:SetTexture(pfUI.media["img:circleparty"]) + frame.pfIcon.ingroup = "PARTY" + elseif not ingroup and frame.pfIcon.ingroup ~= "RAID" then + frame.pfIcon:SetTexture(pfUI.media["img:circleraid"]) + frame.pfIcon.ingroup = "RAID" + end + + -- detect unit class and set color + local _, class = UnitClass(unitstr) + local color = RAID_CLASS_COLORS[class] + if color then + frame.pfIcon:SetVertexColor(color.r, color.g, color.b) + else + frame.pfIcon:SetVertexColor(.5,1,.5) + end + end + end + end) +end)