Quantcast
D2Minimap = true

D2MinimapSettings = {
    ["Frames"] = {
        ["Minimap"] = {
            ["Shown"] = true,
            ["MaskSquare"] = false,
            ["Alpha"] = .1,
        },
        ["MinimapZoneTextButton"] = {
            ["Alpha"] = .3,
        },
        ["MinimapBorderTop"] = {
            ["Alpha"] = 1,
        },
        ["TimeManagerClockButton"] = {
            ["Alpha"] = .3,
        },
        ["MiniMapWorldMapButton"] = {
            ["Alpha"] = .8,
        },
        ["MiniMapTracking"] = {
            ["Alpha"] = .2,
        },
        ["MiniMapMailFrame"] = {
            ["Alpha"] = .5,
        },
        ["GarrisonLandingPageMinimapButton"] = {
            ["Alpha"] = .2,
        },
    },
}

function D2Minimap_load()
    for frame, ftable in pairs(D2MinimapSettings["Frames"]) do
        pcall(function()
            _G[frame]:SetAlpha(ftable["Alpha"])
            p = ftable["Point"]
            _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 not frame == "" then
            pcall(function()
                ftable["Alpha"] = _G[frame]:GetAlpha()
                p = {}
                p.point, p.relativeTo, p.relativePoint, p.xOfs, p.yOfs = _G[frame]:GetPoint()
                ftable["Point"] = p
            end)
        end
    end
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
        Minimap:SetPlayerTexture("")

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

        Minimap:EnableMouse(false)

        Minimap:SetZoom(5)
        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"])
        MiniMapTracking:SetMovable(true)
        MiniMapTracking:RegisterForDrag("RightButton")
        MiniMapTracking:SetScript("OnDragStart", MiniMapTracking.StartMoving)
        MiniMapTracking:SetScript("OnDragStop", MiniMapTracking.StopMovingOrSizing)

        -- MiniMapMailFrame
        MiniMapMailFrame:SetParent(UIParent)
        MiniMapMailFrame:ClearAllPoints()
        MiniMapMailFrame:SetPoint("BOTTOMRIGHT", UIParent, "BOTTOMRIGHT", -50, 50);
        MiniMapMailFrame:SetAlpha(D2MinimapSettings["Frames"]["MiniMapMailFrame"]["Alpha"])
        MiniMapMailFrame:SetFrameStrata("BACKGROUND")
        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("BOTTOMRIGHT", UIParent, "BOTTOMRIGHT", 0, 0);
        GarrisonLandingPageMinimapButton:SetAlpha(D2MinimapSettings["Frames"]["GarrisonLandingPageMinimapButton"]["Alpha"])
        GarrisonLandingPageMinimapButton:SetFrameStrata("BACKGROUND")
        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)