mirror of
https://github.com/Bluewhale1337/ElvUIModernized.git
synced 2026-07-27 08:24:44 +00:00
113 lines
3.9 KiB
Lua
113 lines
3.9 KiB
Lua
local E, L, V, P, G = unpack(ElvUI); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
|
|
local M = E:NewModule("WorldMap", "AceHook-3.0", "AceEvent-3.0", "AceTimer-3.0");
|
|
E.WorldMap = M
|
|
|
|
--Cache global variables
|
|
--Lua functions
|
|
local format = string.format
|
|
--WoW API / Variables
|
|
local CreateFrame = CreateFrame
|
|
local GetPlayerMapPosition = GetPlayerMapPosition
|
|
local GetCursorPosition = GetCursorPosition
|
|
local PLAYER = PLAYER
|
|
|
|
local INVERTED_POINTS = {
|
|
["TOPLEFT"] = "BOTTOMLEFT",
|
|
["TOPRIGHT"] = "BOTTOMRIGHT",
|
|
["BOTTOMLEFT"] = "TOPLEFT",
|
|
["BOTTOMRIGHT"] = "TOPRIGHT",
|
|
["TOP"] = "BOTTOM",
|
|
["BOTTOM"] = "TOP"
|
|
}
|
|
|
|
function M:UpdateCoords()
|
|
if not WorldMapFrame:IsShown() then return end
|
|
local x, y = GetPlayerMapPosition("player")
|
|
x = x and E:Round(100 * x, 2) or 0
|
|
y = y and E:Round(100 * y, 2) or 0
|
|
|
|
if x ~= 0 and y ~= 0 then
|
|
CoordsHolder.playerCoords:SetText(PLAYER..": "..format("%.2f, %.2f", x, y))
|
|
else
|
|
CoordsHolder.playerCoords:SetText("")
|
|
end
|
|
|
|
local scale = WorldMapDetailFrame:GetEffectiveScale()
|
|
local width = WorldMapDetailFrame:GetWidth()
|
|
local height = WorldMapDetailFrame:GetHeight()
|
|
local centerX, centerY = WorldMapDetailFrame:GetCenter()
|
|
local x, y = GetCursorPosition()
|
|
local adjustedX = (x / scale - (centerX - (width / 2))) / width
|
|
local adjustedY = (centerY + (height / 2) - y / scale) / height
|
|
|
|
if adjustedX >= 0 and adjustedY >= 0 and adjustedX <= 1 and adjustedY <= 1 then
|
|
adjustedX = E:Round(100 * adjustedX, 2)
|
|
adjustedY = E:Round(100 * adjustedY, 2)
|
|
CoordsHolder.mouseCoords:SetText(L["Mouse"]..": "..format("%.2f, %.2f", adjustedX, adjustedY))
|
|
else
|
|
CoordsHolder.mouseCoords:SetText("")
|
|
end
|
|
end
|
|
|
|
function M:PositionCoords()
|
|
local db = E.global.general.WorldMapCoordinates
|
|
local position = db.position
|
|
local xOffset = db.xOffset
|
|
local yOffset = db.yOffset
|
|
|
|
local x, y = 5, 5
|
|
if position == "BOTTOMRIGHT" or position == "TOPRIGHT" then x = -5 end
|
|
if position == "TOPLEFT" or position == "TOP" or position == "TOPRIGHT" then y = -5 end
|
|
|
|
CoordsHolder.playerCoords:ClearAllPoints()
|
|
CoordsHolder.playerCoords:SetPoint(position, WorldMapDetailFrame, position, x + xOffset, y + yOffset)
|
|
CoordsHolder.mouseCoords:ClearAllPoints()
|
|
CoordsHolder.mouseCoords:SetPoint(position, CoordsHolder.playerCoords, INVERTED_POINTS[position], 0, y)
|
|
end
|
|
|
|
function M:Initialize()
|
|
if E.global.general.WorldMapCoordinates.enable then
|
|
local coordsHolder = CreateFrame("Frame", "CoordsHolder", WorldMapFrame)
|
|
coordsHolder:SetFrameStrata(WorldMapDetailFrame:GetFrameStrata())
|
|
coordsHolder.playerCoords = coordsHolder:CreateFontString(nil, "OVERLAY")
|
|
coordsHolder.mouseCoords = coordsHolder:CreateFontString(nil, "OVERLAY")
|
|
coordsHolder.playerCoords:SetTextColor(1, 1 ,0)
|
|
coordsHolder.mouseCoords:SetTextColor(1, 1 ,0)
|
|
coordsHolder.playerCoords:SetFontObject(NumberFontNormal)
|
|
coordsHolder.mouseCoords:SetFontObject(NumberFontNormal)
|
|
coordsHolder.playerCoords:SetPoint("BOTTOMLEFT", WorldMapDetailFrame, "BOTTOMLEFT", 5, 5)
|
|
coordsHolder.playerCoords:SetText(PLAYER..": 0, 0")
|
|
coordsHolder.mouseCoords:SetPoint("BOTTOMLEFT", coordsHolder.playerCoords, "TOPLEFT", 0, 5)
|
|
coordsHolder.mouseCoords:SetText("MOUSE_LABEL"..": 0, 0")
|
|
|
|
coordsHolder:SetScript("OnUpdate", self.UpdateCoords)
|
|
|
|
self:PositionCoords()
|
|
end
|
|
|
|
if E.global.general.smallerWorldMap then
|
|
BlackoutWorld:SetTexture(nil)
|
|
|
|
WorldMapFrame:SetParent(E.UIParent)
|
|
WorldMapFrame:SetScale(1)
|
|
WorldMapFrame:EnableKeyboard(false)
|
|
WorldMapFrame:EnableMouse(false)
|
|
WorldMapFrame:SetToplevel()
|
|
|
|
UIPanelWindows["WorldMapFrame"] = {area = "center", pushable = 0, whileDead = 1}
|
|
|
|
HookScript(DropDownList1, "OnShow", function()
|
|
if DropDownList1:GetScale() ~= UIParent:GetScale() then
|
|
DropDownList1:SetScale(UIParent:GetScale())
|
|
end
|
|
end)
|
|
|
|
WorldMapTooltip:SetFrameLevel(WorldMapPositioningGuide:GetFrameLevel() + 110)
|
|
end
|
|
end
|
|
|
|
local function InitializeCallback()
|
|
M:Initialize()
|
|
end
|
|
|
|
E:RegisterInitialModule(M:GetName(), InitializeCallback) |