Quantcast
D2Minimap = true

D2MinimapSettings = {
	["Frames"] = {
		["MinimapBorderTop"] = {
			["Alpha"] = 1,
			["Point"] = {
			},
		},
		["MinimapZoneTextButton"] = {
			["Alpha"] = 0.3,
			["Point"] = {
			},
		},
		["MiniMapWorldMapButton"] = {
			["Alpha"] = 0.8,
			["Point"] = {
			},
		},
		["MiniMapTracking"] = {
			["Alpha"] = 0.2,
			["Point"] = {
			},
		},
		["GarrisonLandingPageMinimapButton"] = {
			["Alpha"] = 0.2,
			["Point"] = {
				["yOfs"] = 0,
				["xOfs"] = 0,
				["point"] = "TOPRIGHT",
				["relativePoint"] = "TOPRIGHT",
			},
		},
		["MiniMapMailFrame"] = {
			["Alpha"] = 0.5,
			["Point"] = {
			},
		},
		["TimeManagerClockButton"] = {
			["Alpha"] = 0.3,
			["Point"] = {
			},
		},
		["Minimap"] = {
			["Zoom"] = 5,
			["Point"] = {
			},
			["Shown"] = true,
			["PlayerArrow"] = false,
			["Alpha"] = 0.1,
			["MaskSquare"] = false,
		},
	},
}

function D2Minimap_load()
    for frame, ftable in pairs(D2MinimapSettings["Frames"]) do
        pcall(function()
            _G[frame]:SetAlpha(ftable["Alpha"])
        end)
        pcall(function()
            p = ftable["Point"]
            _G[frame]:ClearAllPoints()
            _G[frame]:SetPoint(p.point, p.relativeTo, p.relativePoint, p.xOfs, p.yOfs)
        end)
    end
end

function D2Minimap_save()
    for frame, ftable in pairs(D2MinimapSettings["Frames"]) do
        if frame ~= "" then
            ftable["Alpha"] = _G[frame]:GetAlpha()
            pcall(function()
                p = {}
                p.point, p.relativeTo, p.relativePoint, p.xOfs, p.yOfs = _G[frame]:GetPoint()
                pcall(function()
                    p.relativeFrame = p.relativeTo:GetName()
                end)
                ftable["Point"] = p
            end)
        end
    end
    D2MinimapSettings["Frames"]["Minimap"]["Shown"] = Minimap:IsShown()
    D2MinimapSettings["Frames"]["Minimap"]["Zoom"] = Minimap:GetZoom()
end

local function D2Minimap_init(self, event, addon, ...)
    if (event == "PLAYER_ENTERING_WORLD") then
        Minimap:ClearAllPoints()
        Minimap:SetParent(UIParent)
        Minimap:SetAlpha(D2MinimapSettings["Frames"]["Minimap"]["Alpha"])
        Minimap:SetFrameStrata("BACKGROUND")
        Minimap:SetPoint("CENTER", UIParent, "CENTER", 0, 0);
        Minimap:SetHeight(1200)
        Minimap:SetWidth(1200)
        Minimap:SetScale(1.5)
        Minimap:SetScript("OnMouseDown", nil)

        -- Remove Player-Arrow
        if D2MinimapSettings["Frames"]["Minimap"]["PlayerArrow"] then
            Minimap:SetPlayerTexture("Interface\\MINIMAP\\MinimapArrow")
            -- Minimap:SetPlayerTexture("Interface\\Minimap\\Vehicle-SilvershardMines-Arrow")
        else
            Minimap:SetPlayerTexture("")
        end

        -- Square the Map
        if D2MinimapSettings["Frames"]["Minimap"]["MaskSquare"] then
            Minimap:SetMaskTexture("Interface\\Buttons\\WHITE8X8")
        end

        Minimap:EnableMouse(false)

        Minimap:SetZoom(D2MinimapSettings["Frames"]["Minimap"]["Zoom"])
        SetCVar("rotateMinimap", true)

        -- MinimapZoneTextButton and MinimapBorderTop
        MinimapZoneTextButton:SetParent(UIParent)
        MinimapZoneTextButton:SetPoint("TOP", UIParent, "TOP", 0, 0)
        MinimapZoneTextButton:SetAlpha(D2MinimapSettings["Frames"]["MinimapZoneTextButton"]["Alpha"])
        MinimapBorderTop:SetParent(MinimapZoneTextButton)
        MinimapBorderTop:ClearAllPoints()
        MinimapBorderTop:SetPoint("TOP", MinimapZoneTextButton, "CENTER", 0, 15)

        -- TimeManagerClockButton
        TimeManagerClockButton:SetParent(UIParent)
        TimeManagerClockButton:SetPoint("TOP", MinimapZoneTextButton, "BOTTOM", 0, 3);
        TimeManagerClockButton:SetAlpha(D2MinimapSettings["Frames"]["TimeManagerClockButton"]["Alpha"])
        TimeManagerClockButton:SetMovable(true)
        TimeManagerClockButton:EnableMouse(true)
        TimeManagerClockButton:RegisterForDrag("LeftButton")
        TimeManagerClockButton:SetScript("OnDragStart", TimeManagerClockButton.StartMoving)
        TimeManagerClockButton:SetScript("OnDragStop", TimeManagerClockButton.StopMovingOrSizing)

        -- MiniMapWorldMapButton
        MiniMapWorldMapButton:SetParent(MinimapZoneTextButton)
        MiniMapWorldMapButton:ClearAllPoints()
        MiniMapWorldMapButton:SetPoint("TOP", MinimapZoneTextButton, "RIGHT", 28, 15)
        MiniMapWorldMapButton:SetAlpha(D2MinimapSettings["Frames"]["MiniMapWorldMapButton"]["Alpha"])

        -- MiniMapTracking
        MiniMapTracking:SetParent(UIParent)
        MiniMapTracking:SetPoint("TOPLEFT", UIParent, "TOPLEFT", 0, 0);
        MiniMapTracking:SetAlpha(D2MinimapSettings["Frames"]["MiniMapTracking"]["Alpha"])

        -- MiniMapMailFrame
        MiniMapMailFrame:SetParent(UIParent)
        MiniMapMailFrame:ClearAllPoints()
        MiniMapMailFrame:SetPoint("TOPRIGHT", UIParent, "TOPRIGHT", -50, 50);
        MiniMapMailFrame:SetAlpha(D2MinimapSettings["Frames"]["MiniMapMailFrame"]["Alpha"])
        MiniMapMailFrame:SetMovable(true)
        MiniMapMailFrame:EnableMouse(true)
        MiniMapMailFrame:RegisterForDrag("LeftButton")
        MiniMapMailFrame:SetScript("OnDragStart", MiniMapMailFrame.StartMoving)
        MiniMapMailFrame:SetScript("OnDragStop", MiniMapMailFrame.StopMovingOrSizing)

        -- GarrisonLandingPageMinimapButton
        GarrisonLandingPageMinimapButton:SetParent(UIParent)
        GarrisonLandingPageMinimapButton:ClearAllPoints()
        GarrisonLandingPageMinimapButton:SetPoint("TOPRIGHT", UIParent, "TOPRIGHT", 0, 0);
        GarrisonLandingPageMinimapButton:SetAlpha(D2MinimapSettings["Frames"]["GarrisonLandingPageMinimapButton"]["Alpha"])
        GarrisonLandingPageMinimapButton:SetMovable(true)
        GarrisonLandingPageMinimapButton:EnableMouse(true)
        GarrisonLandingPageMinimapButton:RegisterForDrag("LeftButton")
        GarrisonLandingPageMinimapButton:SetScript("OnDragStart", GarrisonLandingPageMinimapButton.StartMoving)
        GarrisonLandingPageMinimapButton:SetScript("OnDragStop", GarrisonLandingPageMinimapButton.StopMovingOrSizing)

        MinimapBorder:Hide()
        MinimapZoomIn:Hide()
        MinimapZoomOut:Hide()
        MinimapCluster:Hide()
        if not D2MinimapSettings["Frames"]["Minimap"]["Shown"] then
            Minimap:Hide()
        end
    end
    if (event == "ADDON_LOADED") then
        D2Minimap_load()
    end
    if (event == "PLAYER_LOGOUT") then
        D2Minimap_save()
    end
end

local D2MinimapFrame = CreateFrame("Frame", "D2MinimapFrame", UIParent, "SecureHandlerStateTemplate")
D2MinimapFrame:SetScript("OnEvent", D2Minimap_init)
D2MinimapFrame:RegisterEvent("ADDON_LOADED")
D2MinimapFrame:RegisterEvent("PLAYER_ENTERING_WORLD")
D2MinimapFrame:RegisterEvent("PLAYER_LOGIN")
D2MinimapFrame:RegisterEvent("PLAYER_LOGOUT")

-- Ingame Configuration
configui = {}
configui = CreateFrame( "Frame", "D2Minimap", UIParent )
configui.name = "D2Minimap"
configui.okay = nil
configui.cancel = nil
configui.default = nil
InterfaceOptions_AddCategory(configui)