Merge pull request #14 from Dusk-92/test/worldmap-coordinates-classicapi

Optimize WorldMap coordinate updates with ClassicAPI
This commit is contained in:
Dusk-92
2026-09-03 21:27:14 +02:00
committed by GitHub
+39 -14
View File
@@ -1,5 +1,6 @@
local _G = ShaguTweaks.GetGlobalEnv()
local T = ShaguTweaks.T
local API = ShaguTweaks.API
local module = ShaguTweaks:register({
title = T["WorldMap Coordinates"],
@@ -41,7 +42,15 @@ module.enable = function(self)
WorldMapButton.player.text:SetTextColor(1, 1, 1)
WorldMapButton.player.text:SetJustifyH("RIGHT")
local canMouseOver = API and API.regionmouseover
local cursorFormat = "|cffffcc00" .. T["Cursor"] .. ": |r%.1f / %.1f"
local playerFormat = "|cffffcc00" .. T["Player"] .. ": |r%.1f / %.1f"
local cursorNA = "|cffffcc00" .. T["Cursor"] .. ": |r" .. T["N/A"]
local playerNA = "|cffffcc00" .. T["Player"] .. ": |r" .. T["N/A"]
WorldMapButton.coords.elapsed = 0
WorldMapButton.coords.lastCursorText = nil
WorldMapButton.coords.lastPlayerText = nil
WorldMapButton.coords:SetScript("OnUpdate", function()
-- Coordinates do not need a full render-frame refresh. 10 Hz keeps the
-- display responsive while avoiding repeated map/cursor queries and
@@ -50,28 +59,44 @@ module.enable = function(self)
if this.elapsed < .1 then return end
this.elapsed = 0
local width = WorldMapButton:GetWidth()
local height = WorldMapButton:GetHeight()
local mx, my = WorldMapButton:GetCenter()
local scale = WorldMapButton:GetEffectiveScale()
local x, y = GetCursorPosition()
local cursorText
if canMouseOver and API.IsMouseOver(WorldMapButton) then
local width = WorldMapButton:GetWidth()
local height = WorldMapButton:GetHeight()
local mx, my = WorldMapButton:GetCenter()
local scale = WorldMapButton:GetEffectiveScale()
local x, y = GetCursorPosition()
if mx and my then
mx = (( x / scale ) - ( mx - width / 2)) / width * 100
my = (( my + height / 2 ) - ( y / scale )) / height * 100
if mx and my then
mx = (( x / scale ) - ( mx - width / 2)) / width * 100
my = (( my + height / 2 ) - ( y / scale )) / height * 100
end
if mx and my then
cursorText = string.format(cursorFormat, mx, my)
end
end
if not cursorText then
cursorText = cursorNA
end
if this.lastCursorText ~= cursorText then
this.lastCursorText = cursorText
WorldMapButton.coords.text:SetText(cursorText)
end
local px, py = GetPlayerMapPosition("player")
local playerText
if px > 0 and py > 0 then
WorldMapButton.player.text:SetText(string.format("|cffffcc00" .. T["Player"] .. ": |r%.1f / %.1f", px*100, py*100))
playerText = string.format(playerFormat, px*100, py*100)
else
WorldMapButton.player.text:SetText(string.format("|cffffcc00" .. T["Player"] .. ": |r" .. T["N/A"]))
playerText = playerNA
end
if mx and my and MouseIsOver(WorldMapButton) then
WorldMapButton.coords.text:SetText(string.format("|cffffcc00" .. T["Cursor"] .. ": |r%.1f / %.1f", mx, my))
else
WorldMapButton.coords.text:SetText(string.format("|cffffcc00" .. T["Cursor"] .. ": |r" .. T["N/A"]))
if this.lastPlayerText ~= playerText then
this.lastPlayerText = playerText
WorldMapButton.player.text:SetText(playerText)
end
end)
end