You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
3.9 KiB
123 lines
3.9 KiB
local SLE, T, E, L, V, P, G = unpack(select(2, ...))
|
|
local M = E.Minimap
|
|
local MM = SLE.Minimap
|
|
|
|
--GLOBALS: unpack, select, format, _G, UIFrameFadeIn, InCombatLockdown, CreateFrame, hooksecurefunc, SLECoordsHolder
|
|
local _G = _G
|
|
local format, UIFrameFadeIn = format, UIFrameFadeIn
|
|
|
|
local inRestrictedArea = false
|
|
local displayString = ''
|
|
local mapInfo = E.MapInfo
|
|
|
|
local function HideMinimap()
|
|
_G.MinimapCluster:Hide()
|
|
end
|
|
|
|
local function ShowMinimap()
|
|
if not InCombatLockdown() then
|
|
UIFrameFadeIn(_G.MinimapCluster, 0.2, _G.MinimapCluster:GetAlpha(), 1)
|
|
end
|
|
end
|
|
|
|
function MM:HideMinimapRegister()
|
|
if E.db.sle.minimap.combat then
|
|
M:RegisterEvent("PLAYER_REGEN_DISABLED", HideMinimap)
|
|
M:RegisterEvent("PLAYER_REGEN_ENABLED", ShowMinimap)
|
|
else
|
|
M:UnregisterEvent("PLAYER_REGEN_DISABLED")
|
|
M:UnregisterEvent("PLAYER_REGEN_ENABLED")
|
|
end
|
|
end
|
|
|
|
function MM:HandleEvent()
|
|
if mapInfo.x and mapInfo.y then
|
|
inRestrictedArea = false
|
|
SLECoordsHolder.playerCoords:SetText(format(displayString, mapInfo.xText, mapInfo.yText))
|
|
else
|
|
inRestrictedArea = true
|
|
SLECoordsHolder.playerCoords:SetText('N/A')
|
|
end
|
|
end
|
|
|
|
function MM:UpdateCoords(elapsed)
|
|
if inRestrictedArea or not E.MapInfo.coordsWatching then return end
|
|
|
|
MM.elapsed = (MM.elapsed or 0) + elapsed
|
|
if MM.elapsed < E.db.sle.minimap.coords.throttle then return end
|
|
if mapInfo.x and mapInfo.y then
|
|
-- inRestrictedArea = false
|
|
-- displayString = E.db.sle.minimap.coords.format..", "..E.db.sle.minimap.coords.format
|
|
SLECoordsHolder.playerCoords:SetText(format(displayString, mapInfo.xText, mapInfo.yText))
|
|
else
|
|
-- inRestrictedArea = true
|
|
SLECoordsHolder.playerCoords:SetText('N/A')
|
|
end
|
|
|
|
MM.elapsed = 0
|
|
end
|
|
|
|
function MM:CoordFont()
|
|
SLECoordsHolder.playerCoords:SetFont(E.LSM:Fetch('font', E.db.sle.minimap.coords.font), E.db.sle.minimap.coords.fontSize, E.db.sle.minimap.coords.fontOutline)
|
|
end
|
|
|
|
function MM:UpdateCoordinatesPosition()
|
|
local db = E.db.sle.minimap.coords
|
|
SLECoordsHolder.playerCoords:ClearAllPoints()
|
|
SLECoordsHolder.playerCoords:Point("CENTER", _G.Minimap, "CENTER", db.xOffset, db.yOffset)
|
|
end
|
|
|
|
function MM:CreateCoordsFrame()
|
|
local SLECoordsHolder = CreateFrame('Frame', 'SLECoordsHolder', _G.Minimap)
|
|
SLECoordsHolder:SetFrameLevel(_G.Minimap:GetFrameLevel() + 10)
|
|
SLECoordsHolder:SetFrameStrata(_G.Minimap:GetFrameStrata())
|
|
SLECoordsHolder.playerCoords = SLECoordsHolder:CreateFontString(nil, 'OVERLAY')
|
|
SLECoordsHolder:SetScript('OnUpdate', MM.UpdateCoords)
|
|
|
|
_G.Minimap:HookScript('OnEnter', function()
|
|
if not E.db.sle.minimap.coords.mouseover or not E.private.general.minimap.enable or not E.db.sle.minimap.coords.enable then return end
|
|
SLECoordsHolder:Show()
|
|
end)
|
|
_G.Minimap:HookScript('OnLeave', function()
|
|
if not E.db.sle.minimap.coords.mouseover or not E.private.general.minimap.enable or not E.db.sle.minimap.coords.enable then return end
|
|
SLECoordsHolder:Hide()
|
|
end)
|
|
|
|
MM:UpdateCoordinatesPosition()
|
|
end
|
|
|
|
function MM:UpdateSettings()
|
|
if not _G.SLECoordsHolder then
|
|
MM:CreateCoordsFrame()
|
|
end
|
|
|
|
MM:CoordFont()
|
|
MM:SetCoordsColor()
|
|
MM:UpdateCoordinatesPosition()
|
|
if E.db.sle.minimap.coords.mouseover or not E.private.general.minimap.enable or not E.db.sle.minimap.coords.enable then
|
|
SLECoordsHolder:Hide()
|
|
else
|
|
SLECoordsHolder:Show()
|
|
end
|
|
|
|
displayString = E.db.sle.minimap.coords.format..", "..E.db.sle.minimap.coords.format
|
|
end
|
|
|
|
function MM:SetCoordsColor()
|
|
local color = E.db.sle.minimap.coords.color
|
|
SLECoordsHolder.playerCoords:SetTextColor(color.r, color.g, color.b)
|
|
end
|
|
|
|
function MM:Initialize()
|
|
if not SLE.initialized or not E.private.general.minimap.enable then return end
|
|
|
|
hooksecurefunc(M, 'UpdateSettings', MM.UpdateSettings)
|
|
MM:UpdateSettings()
|
|
MM:HideMinimapRegister()
|
|
MM:RegisterEvent('LOADING_SCREEN_DISABLED', 'HandleEvent')
|
|
MM:RegisterEvent('ZONE_CHANGED', "HandleEvent")
|
|
MM:RegisterEvent('ZONE_CHANGED_INDOORS', 'HandleEvent')
|
|
MM:RegisterEvent('ZONE_CHANGED_NEW_AREA', 'HandleEvent')
|
|
end
|
|
|
|
SLE:RegisterModule(MM:GetName())
|
|
|