init
This commit is contained in:
@@ -0,0 +1,259 @@
|
||||
local E, L, V, P, G = unpack(select(2, ...)) --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
|
||||
local M = E:GetModule("WorldMap")
|
||||
|
||||
--Lua functions
|
||||
local find = string.find
|
||||
--WoW API / Variables
|
||||
local CreateFrame = CreateFrame
|
||||
local GetCVarBool = GetCVarBool
|
||||
local GetCursorPosition = GetCursorPosition
|
||||
local GetPlayerMapPosition = GetPlayerMapPosition
|
||||
local GetUnitSpeed = GetUnitSpeed
|
||||
|
||||
local MOUSE_LABEL = MOUSE_LABEL
|
||||
local PLAYER = PLAYER
|
||||
local WORLDMAP_SETTINGS = WORLDMAP_SETTINGS
|
||||
|
||||
local INVERTED_POINTS = {
|
||||
["TOPLEFT"] = "BOTTOMLEFT",
|
||||
["TOPRIGHT"] = "BOTTOMRIGHT",
|
||||
["BOTTOMLEFT"] = "TOPLEFT",
|
||||
["BOTTOMRIGHT"] = "TOPRIGHT",
|
||||
["TOP"] = "BOTTOM",
|
||||
["BOTTOM"] = "TOP"
|
||||
}
|
||||
|
||||
local function BlobFrameHide()
|
||||
M.blobWasVisible = nil
|
||||
end
|
||||
|
||||
local function BlobFrameShow()
|
||||
M.blobWasVisible = true
|
||||
end
|
||||
|
||||
function M:PLAYER_REGEN_ENABLED()
|
||||
WorldMapBlobFrame.SetFrameLevel = nil
|
||||
WorldMapBlobFrame.SetScale = nil
|
||||
WorldMapBlobFrame.Hide = nil
|
||||
WorldMapBlobFrame.Show = nil
|
||||
|
||||
local frameLevel = WorldMapDetailFrame:GetFrameLevel() + 1
|
||||
|
||||
WorldMapBlobFrame:SetParent(WorldMapFrame)
|
||||
WorldMapBlobFrame:ClearAllPoints()
|
||||
WorldMapBlobFrame:SetPoint("TOPLEFT", WorldMapDetailFrame)
|
||||
WorldMapBlobFrame:SetScale(self.blobNewScale or WORLDMAP_SETTINGS.size)
|
||||
WorldMapBlobFrame:SetFrameLevel(frameLevel)
|
||||
WorldMapBlobFrame:SetFrameLevel(frameLevel) -- called twice to set frame level above the default limit (256)
|
||||
|
||||
if self.blobWasVisible then
|
||||
WorldMapBlobFrame:Show()
|
||||
end
|
||||
|
||||
if WORLDMAP_SETTINGS.selectedQuest then
|
||||
WorldMapBlobFrame:DrawQuestBlob(WORLDMAP_SETTINGS.selectedQuest.questId, false)
|
||||
end
|
||||
|
||||
if self.blobWasVisible then
|
||||
WorldMapBlobFrame_CalculateHitTranslations()
|
||||
|
||||
if WORLDMAP_SETTINGS.selectedQuest and not WORLDMAP_SETTINGS.selectedQuest.completed then
|
||||
WorldMapBlobFrame:DrawQuestBlob(WORLDMAP_SETTINGS.selectedQuest.questId, true)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function M:PLAYER_REGEN_DISABLED()
|
||||
self.blobWasVisible = WorldMapFrame:IsShown() and WorldMapBlobFrame:IsShown()
|
||||
|
||||
WorldMapBlobFrame:SetParent(nil)
|
||||
WorldMapBlobFrame:ClearAllPoints()
|
||||
WorldMapBlobFrame:SetPoint("TOP", UIParent, "BOTTOM")
|
||||
WorldMapBlobFrame:Hide()
|
||||
WorldMapBlobFrame.Hide = BlobFrameHide
|
||||
WorldMapBlobFrame.Show = BlobFrameShow
|
||||
WorldMapBlobFrame.SetFrameLevel = E.noop
|
||||
WorldMapBlobFrame.SetScale = E.noop
|
||||
|
||||
self.blobNewScale = nil
|
||||
end
|
||||
|
||||
local t = 0
|
||||
local function UpdateCoords(self, elapsed)
|
||||
t = t + elapsed
|
||||
if t < 0.03333 then return end
|
||||
t = 0
|
||||
|
||||
local x, y = GetPlayerMapPosition("player")
|
||||
|
||||
if self.playerCoords.x ~= x or self.playerCoords.y ~= y then
|
||||
if x ~= 0 or y ~= 0 then
|
||||
self.playerCoords.x = x
|
||||
self.playerCoords.y = y
|
||||
self.playerCoords:SetFormattedText("%s: %.2f, %.2f", PLAYER, x * 100, y * 100)
|
||||
else
|
||||
self.playerCoords.x = nil
|
||||
self.playerCoords.y = nil
|
||||
self.playerCoords:SetFormattedText("%s: %s", PLAYER, "N/A")
|
||||
end
|
||||
end
|
||||
|
||||
if WorldMapDetailFrame:IsMouseOver() then
|
||||
local curX, curY = GetCursorPosition()
|
||||
|
||||
if self.mouseCoords.x ~= curX or self.mouseCoords.y ~= curY then
|
||||
local scale = WorldMapDetailFrame:GetEffectiveScale()
|
||||
local width, height = WorldMapDetailFrame:GetSize()
|
||||
local centerX, centerY = WorldMapDetailFrame:GetCenter()
|
||||
local adjustedX = (curX / scale - (centerX - (width * 0.5))) / width
|
||||
local adjustedY = (centerY + (height * 0.5) - curY / scale) / height
|
||||
|
||||
if adjustedX >= 0 and adjustedY >= 0 and adjustedX <= 1 and adjustedY <= 1 then
|
||||
self.mouseCoords.x = curX
|
||||
self.mouseCoords.y = curY
|
||||
self.mouseCoords:SetFormattedText("%s: %.2f, %.2f", MOUSE_LABEL, adjustedX * 100, adjustedY * 100)
|
||||
else
|
||||
self.mouseCoords.x = nil
|
||||
self.mouseCoords.y = nil
|
||||
self.mouseCoords:SetText("")
|
||||
end
|
||||
end
|
||||
elseif self.mouseCoords.x then
|
||||
self.mouseCoords.x = nil
|
||||
self.mouseCoords.y = nil
|
||||
self.mouseCoords:SetText("")
|
||||
end
|
||||
end
|
||||
|
||||
function M:PositionCoords()
|
||||
if not self.coordsHolder then return end
|
||||
|
||||
local db = E.global.general.WorldMapCoordinates
|
||||
local position = db.position
|
||||
|
||||
local x = find(position, "RIGHT") and -5 or 5
|
||||
local y = find(position, "TOP") and -5 or 5
|
||||
|
||||
self.coordsHolder.playerCoords:ClearAllPoints()
|
||||
self.coordsHolder.playerCoords:Point(position, WorldMapDetailFrame, position, x + db.xOffset, y + db.yOffset)
|
||||
|
||||
self.coordsHolder.mouseCoords:ClearAllPoints()
|
||||
self.coordsHolder.mouseCoords:Point(position, self.coordsHolder.playerCoords, INVERTED_POINTS[position], 0, y)
|
||||
end
|
||||
|
||||
function M:ToggleMapFramerate()
|
||||
if WORLDMAP_SETTINGS.size == WORLDMAP_FULLMAP_SIZE or WORLDMAP_SETTINGS.size == WORLDMAP_QUESTLIST_SIZE then
|
||||
WorldMapFrame:SetAttribute("UIPanelLayout-area", "center")
|
||||
WorldMapFrame:SetAttribute("UIPanelLayout-allowOtherPanels", true)
|
||||
|
||||
WorldMapFrame:SetScale(1)
|
||||
end
|
||||
end
|
||||
|
||||
function M:CheckMovement()
|
||||
if not WorldMapFrame:IsShown() then return end
|
||||
|
||||
if GetUnitSpeed("player") ~= 0 and not WorldMapPositioningGuide:IsMouseOver() then
|
||||
WorldMapFrame:SetAlpha(E.global.general.mapAlphaWhenMoving)
|
||||
WorldMapBlobFrame:SetFillAlpha(128 * E.global.general.mapAlphaWhenMoving)
|
||||
WorldMapBlobFrame:SetBorderAlpha(192 * E.global.general.mapAlphaWhenMoving)
|
||||
else
|
||||
WorldMapFrame:SetAlpha(1)
|
||||
WorldMapBlobFrame:SetFillAlpha(128)
|
||||
WorldMapBlobFrame:SetBorderAlpha(192)
|
||||
end
|
||||
end
|
||||
|
||||
function M:UpdateMapAlpha()
|
||||
if (not E.global.general.fadeMapWhenMoving or E.global.general.mapAlphaWhenMoving >= 1) and self.MovingTimer then
|
||||
self:CancelTimer(self.MovingTimer)
|
||||
self.MovingTimer = nil
|
||||
|
||||
WorldMapFrame:SetAlpha(1)
|
||||
WorldMapBlobFrame:SetFillAlpha(128)
|
||||
WorldMapBlobFrame:SetBorderAlpha(192)
|
||||
elseif E.global.general.fadeMapWhenMoving and E.global.general.mapAlphaWhenMoving < 1 and not self.MovingTimer then
|
||||
self.MovingTimer = self:ScheduleRepeatingTimer("CheckMovement", 0.2)
|
||||
end
|
||||
end
|
||||
|
||||
function M:Initialize()
|
||||
self:UpdateMapAlpha()
|
||||
|
||||
if not E.private.worldmap.enable then return end
|
||||
|
||||
if E.global.general.WorldMapCoordinates.enable then
|
||||
local coordsHolder = CreateFrame("Frame", "ElvUI_CoordsHolder", WorldMapFrame)
|
||||
coordsHolder:SetFrameLevel(WORLDMAP_POI_FRAMELEVEL + 100)
|
||||
coordsHolder:SetFrameStrata(WorldMapDetailFrame:GetFrameStrata())
|
||||
|
||||
coordsHolder.playerCoords = coordsHolder:CreateFontString(nil, "OVERLAY")
|
||||
coordsHolder.playerCoords:SetTextColor(1, 1, 0)
|
||||
coordsHolder.playerCoords:SetFontObject(NumberFontNormal)
|
||||
coordsHolder.playerCoords:SetPoint("BOTTOMLEFT", WorldMapDetailFrame, "BOTTOMLEFT", 5, 5)
|
||||
coordsHolder.playerCoords:SetFormattedText("%s: 0, 0", PLAYER)
|
||||
|
||||
coordsHolder.mouseCoords = coordsHolder:CreateFontString(nil, "OVERLAY")
|
||||
coordsHolder.mouseCoords:SetTextColor(1, 1, 0)
|
||||
coordsHolder.mouseCoords:SetFontObject(NumberFontNormal)
|
||||
coordsHolder.mouseCoords:SetPoint("BOTTOMLEFT", coordsHolder.playerCoords, "TOPLEFT", 0, 5)
|
||||
|
||||
coordsHolder:SetScript("OnUpdate", UpdateCoords)
|
||||
|
||||
self.coordsHolder = coordsHolder
|
||||
self:PositionCoords()
|
||||
end
|
||||
|
||||
if E.global.general.smallerWorldMap or (E.private.skins.blizzard.enable and E.private.skins.blizzard.worldmap) then
|
||||
self:RegisterEvent("PLAYER_REGEN_ENABLED")
|
||||
self:RegisterEvent("PLAYER_REGEN_DISABLED")
|
||||
end
|
||||
|
||||
WorldMapFrame:EnableMouse(false)
|
||||
WorldMapFrame.EnableMouse = E.noop
|
||||
|
||||
if E.global.general.smallerWorldMap then
|
||||
BlackoutWorld:SetTexture(nil)
|
||||
|
||||
WorldMapFrame:SetParent(UIParent)
|
||||
WorldMapFrame.SetParent = E.noop
|
||||
|
||||
WorldMapFrame:EnableKeyboard(false)
|
||||
WorldMapFrame.EnableKeyboard = E.noop
|
||||
|
||||
if not GetCVarBool("miniWorldMap") then
|
||||
ShowUIPanel(WorldMapFrame)
|
||||
self:ToggleMapFramerate()
|
||||
HideUIPanel(WorldMapFrame)
|
||||
end
|
||||
|
||||
self:SecureHook("ToggleMapFramerate")
|
||||
|
||||
hooksecurefunc(WorldMapDetailFrame, "SetScale", function(_, scale)
|
||||
self.blobNewScale = scale
|
||||
end)
|
||||
|
||||
DropDownList1:HookScript("OnShow", function(self)
|
||||
if self:GetScale() ~= UIParent:GetScale() then
|
||||
self:SetScale(UIParent:GetScale())
|
||||
end
|
||||
end)
|
||||
|
||||
self:RawHook("WorldMapQuestPOI_OnLeave", function()
|
||||
WorldMapPOIFrame.allowBlobTooltip = true
|
||||
WorldMapTooltip:Hide()
|
||||
end, true)
|
||||
|
||||
-- WorldMapTooltip:SetFrameLevel(WORLDMAP_POI_FRAMELEVEL + 110)
|
||||
-- WorldMapCompareTooltip1:SetFrameLevel(WORLDMAP_POI_FRAMELEVEL + 110)
|
||||
-- WorldMapCompareTooltip2:SetFrameLevel(WORLDMAP_POI_FRAMELEVEL + 110)
|
||||
end
|
||||
|
||||
self.Initialized = true
|
||||
end
|
||||
|
||||
local function InitializeCallback()
|
||||
M:Initialize()
|
||||
end
|
||||
|
||||
E:RegisterInitialModule(M:GetName(), InitializeCallback)
|
||||
Reference in New Issue
Block a user