mirror of
https://github.com/brues-code/pfUI.git
synced 2026-10-01 19:30:00 +00:00
compat\vanilla.lua named the handful of things that differed between clients back when pfUI targeted several. Only one client remains, so every constant had exactly one value. Inline each at its use site and delete the file, init\compat.xml, and both TOC entries. COOLDOWN_FRAME_TYPE -> "Model" LOOT_BUTTON_FRAME_TYPE -> "LootButton" MINIMAP_TRACKING_FRAME -> _G.MiniMapTrackingFrame FRIENDS_NAME_LOCATION -> "ButtonTextNameLocation" EVENTS_MINIMAP_ZONE_UPDATE -> the event list, in panel.lua MICRO_BUTTONS -> a local in panel.lua NAMEPLATE_OBJECTORDER -> a local in nameplates.lua ACTIONBAR_SECURE_TEMPLATE_BAR/_BUTTON -> nil, so the argument goes away NAMEPLATE_FRAMETYPE and PLAYER_BUFF_START_ID had no readers left. RunMacroText moves to pfUI.lua. compat\vanilla.lua was setfenv'd into the pfUI environment, so the function only ever existed on pfUI.env; at file scope it lands on _G as a real export instead. Nothing in pfUI calls it, and ClassicAPI neither defines nor looks for a RunMacroText global -- it does the same throwaway edit box natively in src/macro/Execute.cpp and only defers to a global RunMacro.
160 lines
5.0 KiB
Lua
160 lines
5.0 KiB
Lua
pfUI:RegisterModule("tracking", function ()
|
|
|
|
_G.MiniMapTrackingFrame:UnregisterAllEvents()
|
|
_G.MiniMapTrackingFrame:Hide()
|
|
|
|
local rawborder, border = GetBorderSize()
|
|
local size = tonumber(C.appearance.minimap.tracking_size)
|
|
local pulse = C.appearance.minimap.tracking_pulse == "1"
|
|
|
|
-- Tracking spells come from ClassicAPI's native GetNumTrackingTypes /
|
|
-- GetTrackingInfo (see the DLL's docs/API.md "Tracking"). The DLL
|
|
-- enumerates them straight from the spellbook by tracking-aura effect,
|
|
-- so there is no spell table to maintain here and server-custom trackers
|
|
-- (e.g. Turtle's Find Trees) are picked up automatically.
|
|
|
|
local state = {
|
|
texture = nil,
|
|
spells = {}
|
|
}
|
|
|
|
pfUI.tracking = CreateFrame("Button", "pfUITracking", UIParent)
|
|
pfUI.tracking.invalidSpells = {}
|
|
|
|
pfUI.tracking:SetFrameStrata("HIGH")
|
|
CreateBackdrop(pfUI.tracking, border)
|
|
CreateBackdropShadow(pfUI.tracking)
|
|
|
|
pfUI.tracking:SetPoint("TOPLEFT", pfUI.minimap, -10, -10)
|
|
UpdateMovable(pfUI.tracking)
|
|
pfUI.tracking:SetWidth(size)
|
|
pfUI.tracking:SetHeight(size)
|
|
|
|
pfUI.tracking.icon = pfUI.tracking:CreateTexture("BACKGROUND")
|
|
pfUI.tracking.icon:SetTexCoord(.08, .92, .08, .92)
|
|
pfUI.tracking.icon:SetAllPoints(pfUI.tracking)
|
|
|
|
pfUI.tracking.menu = CreateFrame("Frame", "pfUIDropDownMenuTracking", nil, "UIDropDownMenuTemplate")
|
|
|
|
pfUI.tracking:RegisterEvent("PLAYER_ENTERING_WORLD")
|
|
pfUI.tracking:RegisterEvent("PLAYER_AURAS_CHANGED")
|
|
pfUI.tracking:RegisterEvent("SPELLS_CHANGED")
|
|
pfUI.tracking:RegisterEvent("UPDATE_SHAPESHIFT_FORMS")
|
|
pfUI.tracking:SetScript("OnEvent", function()
|
|
if event == "SPELLS_CHANGED" then
|
|
state.spells = {}
|
|
end
|
|
this:RefreshSpells()
|
|
this:RefreshMenu()
|
|
end)
|
|
|
|
pfUI.tracking:SetScript("OnUpdate", function()
|
|
if this.pulse then
|
|
local _,_,_,alpha = this.icon:GetVertexColor()
|
|
local fpsmod = GetFramerate() / 30
|
|
if not alpha or alpha >= 0.9 then
|
|
this.modifier = -0.03 / fpsmod
|
|
elseif alpha <= .5 then
|
|
this.modifier = 0.03 / fpsmod
|
|
end
|
|
this.icon:SetVertexColor(1,1,1,alpha + this.modifier)
|
|
end
|
|
end)
|
|
|
|
pfUI.tracking:RegisterForClicks("LeftButtonUp", "RightButtonUp")
|
|
pfUI.tracking:SetScript("OnClick", function()
|
|
if arg1 == "RightButton" then
|
|
pfUI.tracking:InitMenu()
|
|
ToggleDropDownMenu(1, nil, pfUI.tracking.menu, this, -5, -5)
|
|
end
|
|
if arg1 == "LeftButton" and state.texture then
|
|
CancelTrackingBuff()
|
|
end
|
|
end)
|
|
|
|
pfUI.tracking:SetScript("OnEnter", function()
|
|
GameTooltip_SetDefaultAnchor(GameTooltip, this)
|
|
if state.texture then
|
|
GameTooltip:SetTrackingSpell()
|
|
else
|
|
GameTooltip:SetText(T["No tracking spell active"])
|
|
end
|
|
GameTooltip:Show()
|
|
end)
|
|
|
|
pfUI.tracking:SetScript("OnLeave", function()
|
|
GameTooltip:Hide()
|
|
end)
|
|
|
|
function pfUI.tracking:RefreshSpells()
|
|
state.spells = {}
|
|
if not GetNumTrackingTypes then return end
|
|
|
|
-- Druid Track Humanoids (5225) only casts in Cat Form. Hide it out of
|
|
-- form so the menu never offers a tracker that would fail to cast.
|
|
local isCatForm = pfUI.tracking:PlayerIsDruidInCatForm(UnitClassBase("player"))
|
|
|
|
for i = 1, GetNumTrackingTypes() do
|
|
local name, texture, _, _, spellId = GetTrackingInfo(i)
|
|
local castable = not (spellId == 5225 and not isCatForm)
|
|
if name and texture and castable
|
|
and not pfUI.tracking.invalidSpells[name] then
|
|
state.spells[i] = {
|
|
index = i, -- tracking index, passed to SetTracking()
|
|
name = name,
|
|
texture = texture,
|
|
spellId = spellId,
|
|
}
|
|
end
|
|
end
|
|
end
|
|
|
|
function pfUI.tracking:RefreshMenu()
|
|
local texture = GetTrackingTexture()
|
|
if texture and texture ~= state.texture then
|
|
state.texture = texture
|
|
pfUI.tracking.pulse = nil
|
|
pfUI.tracking.icon:SetTexture(texture)
|
|
pfUI.tracking.icon:SetVertexColor(1,1,1,1)
|
|
pfUI.tracking:Show()
|
|
elseif not texture then
|
|
state.texture = nil
|
|
|
|
if pulse and next(state.spells) ~= nil then
|
|
pfUI.tracking.pulse = true
|
|
pfUI.tracking.icon:SetTexture("Interface\\Icons\\INV_Misc_QuestionMark")
|
|
pfUI.tracking.icon:SetVertexColor(1,1,1,1)
|
|
pfUI.tracking:Show()
|
|
else
|
|
pfUI.tracking.pulse = nil
|
|
pfUI.tracking:Hide()
|
|
end
|
|
end
|
|
end
|
|
|
|
function pfUI.tracking:PlayerIsDruidInCatForm(playerClass)
|
|
return playerClass == "DRUID" and GetShapeshiftFormID() == 1
|
|
end
|
|
|
|
function pfUI.tracking:InitMenu()
|
|
UIDropDownMenu_Initialize(pfUI.tracking.menu, function ()
|
|
UIDropDownMenu_AddButton({text = T["Minimap Tracking"], isTitle = 1})
|
|
for _, spell in pairs(state.spells) do
|
|
UIDropDownMenu_AddButton({
|
|
text = spell.name,
|
|
icon = spell.texture,
|
|
tCoordLeft = .1,
|
|
tCoordRight = .9,
|
|
tCoordTop = .1,
|
|
tCoordBottom = .9,
|
|
checked = spell.texture == state.texture,
|
|
arg1 = spell,
|
|
func = function (arg1)
|
|
SetTracking(arg1.index)
|
|
CloseDropDownMenus()
|
|
end
|
|
})
|
|
end
|
|
end, "MENU")
|
|
end
|
|
end) |