local LibConfig = LibStub('LibConfig-1.0') local LibSharedMedia = LibStub('LibSharedMedia-3.0') local pMinimap = CreateFrame('Frame') pMinimap:SetScript('OnEvent', function(self, event, ...) self[event](self, ...) end) pMinimap:RegisterEvent('PLAYER_LOGIN') pMinimap:RegisterEvent('PLAYER_LOGOUT') local DB, UNLOCKED local PLAYER = GetRealmName() .. ' - ' .. UnitName('player') local DEFAULTS = { minimap = { scale = 0.9, level = 2, strata = 'BACKGROUND', borderSize = 1, borderColors = {0, 0, 0, 1}, position = 'TOPRIGHT\031-15\031-15', }, objects = { Zone = {shown = false, point = 'TOP'}, Difficulty = {shown = false, point = 'BOTTOM'}, Battlefield = {shown = true, point = 'TOPRIGHT'}, Dungeon = {shown = true, point = 'TOPRIGHT'}, Tracking = {shown = true, point = 'TOPLEFT'}, Clock = {shown = true, point = 'BOTTOM'}, Mail = {shown = true, point = 'BOTTOMRIGHT'}, }, font = { index = 2, size = 12, shadow = 'OUTLINE', monochrome = false, }, } local OBJECTS = { Zone = 'MinimapZoneTextButton', Difficulty = 'MiniMapInstanceDifficulty', Battlefield = 'MiniMapBattlefieldFrame', Dungeon = 'MiniMapLFGFrame', Tracking = 'MiniMapTracking', Clock = 'TimeManagerClockButton', Mail = 'MiniMapMailFrame', } function UpdateObjects() for name, setting in pairs(DB.objects) do local object = _G[OBJECTS[name]] if(setting.shown) then object:SetAlpha(1) object:EnableMouse(true) else object:SetAlpha(0) object:EnableMouse(false) end object:ClearAllPoints() object:SetPoint(setting.point) end end function UpdateCore() Minimap:SetScale(DB.minimap.scale) Minimap:SetFrameStrata(DB.minimap.strata) Minimap:SetFrameLevel(DB.minimap.level) local size = DB.minimap.borderSize Minimap:SetBackdrop({bgFile = [=[Interface\ChatFrame\ChatFrameBackground]=], insets = {left = -size, right = -size, top = -size, bottom = -size}}) Minimap:SetBackdropColor(unpack(DB.minimap.borderColors)) end function UpdateFont() local fonts = LibSharedMedia:List('font') local font, size = LibSharedMedia:Fetch('font', fonts[DB.font.index]), DB.font.size local flag = DB.font.shadow .. (DB.font.monochrome and 'MONOCHROME' or '') MinimapZoneText:SetFont(font, size, flag) TimeManagerClockTicker:SetFont(font, size, flag) end function UpdatePosition(save) if(save) then local point, _, _, x, y = Minimap:GetPoint() DB.minimap.position = string.format('%s\031%d\031%d', point, x, y) else local point, x, y = string.split('\031', DB.minimap.position) Minimap:ClearAllPoints() Minimap:SetPoint(point, UIParent, point, x, y) end end function pMinimap:PLAYER_LOGIN() pMinimapProfiles = pMinimapProfiles or {} DB = pMinimapProfiles[PLAYER] or DEFAULTS MinimapZoomIn:Hide() MinimapZoomOut:Hide() Minimap:EnableMouseWheel() Minimap:SetScript('OnMouseWheel', function(self, direction) if(direction > 0) then MinimapZoomIn:Click() else MinimapZoomOut:Click() end end) Minimap:SetMovable(true) Minimap:SetClampedToScreen() Minimap:RegisterForDrag('LeftButton') Minimap:SetMaskTexture([=[Interface\ChatFrame\ChatFrameBackground]=]) Minimap:SetScript('OnDragStart', function(self) if(not UNLOCKED) then return end self:StartMoving() end) Minimap:SetScript('OnDragStop', function(self) if(not UNLOCKED) then return end self:StopMovingOrSizing() end) MinimapCluster:EnableMouse(false) MinimapBorder:SetTexture(nil) MinimapBorderTop:Hide() MinimapNorthTag:SetAlpha(0) MiniMapWorldMapButton:Hide() GameTimeFrame:Hide() MiniMapTracking:SetParent(Minimap) MiniMapTrackingBackground:Hide() MiniMapTrackingButtonBorder:SetTexture(nil) MiniMapTrackingButton:SetHighlightTexture(nil) MiniMapTrackingIconOverlay:SetTexture(nil) MiniMapTrackingIcon:SetTexCoord(0.065, 0.935, 0.065, 0.935) MiniMapLFGFrame:SetParent(Minimap) MiniMapLFGFrame:SetHighlightTexture(nil) MiniMapLFGFrameBorder:Hide() LFDSearchStatus:SetClampedToScreen(true) MiniMapBattlefieldFrame:SetParent(Minimap) MiniMapBattlefieldBorder:SetTexture(nil) BattlegroundShine:Hide() MiniMapMailIcon:SetTexture([=[Interface\Minimap\Tracking\Mailbox]=]) MiniMapMailFrame:SetParent(Minimap) MiniMapMailBorder:SetTexture(nil) MinimapZoneTextButton:SetParent(Minimap) MinimapZoneText:SetShadowOffset(0, 0) TimeManager_LoadUI() TimeManagerClockButton:GetRegions():Hide() TimeManagerClockButton:SetSize(40, 14) TimeManagerClockTicker:SetPoint('CENTER', TimeManagerClockButton) TimeManagerClockTicker:SetShadowOffset(0, 0) UNLOCKED = false UpdatePosition() UpdateObjects() UpdateCore() UpdateFont() end function pMinimap:PLAYER_LOGOUT() pMinimapProfiles = pMinimapProfiles or {} pMinimapProfiles[PLAYER] = DB end -- http://wowwiki.com/GetMinimapShape function GetMinimapShape() return 'SQUARE' end LibConfig.AddConfig('pMinimap', nil, function(self) self:CreateSlider( 'name', 'Scale', 'step', 0.1, 'minValue', 0.5, 'maxValue', 2.5, 'default', DEFAULTS.minimap.scale, 'currentTextFunc', function(value) return string.format('%.1f', value) end, 'getFunc', function() return DB.minimap.scale end, 'setFunc', function(value) DB.minimap.scale = value; UpdateCore() end ):SetPoint('TOPLEFT', 30, -30) self:CreateCheckBox( 'name', 'Unlock', 'default', false, 'getFunc', function() return UNLOCKED end, 'setFunc', function() UNLOCKED = not UNLOCKED end, 'okayFunc', function() UpdatePosition(true) end, 'cancelFunc', function() UpdatePosition() end, 'defaultFunc', function() DB.minimap.position = DEFAULTS.minimap.position; UpdatePosition() end ):SetPoint('TOPLEFT', 30, -80) self:CreateSlider( 'name', 'Frame Level', 'step', 1, 'minValue', 0, 'maxValue', 10, 'default', DEFAULTS.minimap.level, 'currentTextFunc', function(value) return value end, 'getFunc', function() return DB.minimap.level end, 'setFunc', function(value) DB.minimap.level = value; UpdateCore() end ):SetPoint('TOPRIGHT', -30, -30) self:CreateDropDown( 'name', 'Frame Strata', 'default', DEFAULTS.minimap.strata, 'getFunc', function() return DB.minimap.strata end, 'setFunc', function(value) DB.minimap.strata = value; UpdateCore() end, 'values', {HIGH = 'High', MEDIUM = 'Medium', LOW = 'Low', BACKGROUND = 'Background'} ):SetPoint('TOPRIGHT', -10, -80) self:CreateSlider( 'name', 'Border Thickness', 'step', 1, 'minValue', 0, 'maxValue', 10, 'default', DEFAULTS.minimap.borderSize, 'currentTextFunc', function(value) return value end, 'getFunc', function() return DB.minimap.borderSize end, 'setFunc', function(value) DB.minimap.borderSize = value; UpdateCore() end ):SetPoint('LEFT', 30, 0) self:CreatePalette( 'name', 'Border Color', 'hasAlpha', true, 'default', DEFAULTS.minimap.borderColors, 'getFunc', function() return unpack(DB.minimap.borderColors) end, 'setFunc', function(r, g, b, a) DB.minimap.borderColors = {r, g, b, a}; UpdateCore() end ):SetPoint('RIGHT', -130, 0) self:CreateDropDown( 'name', 'Font', 'default', DEFAULTS.font.index, 'getFunc', function() return DB.font.index end, 'setFunc', function(value) DB.font.index = value; UpdateFont() end, 'values', LibSharedMedia:List('font') ):SetPoint('BOTTOMLEFT', 10, 20) self:CreateSlider( 'name', 'Font Size', 'step', 1, 'minValue', 6, 'maxValue', 36, 'default', DEFAULTS.font.size, 'currentTextFunc', function(value) return value end, 'getFunc', function() return DB.font.size end, 'setFunc', function(value) DB.font.size = value; UpdateFont() end ):SetPoint('BOTTOMLEFT', 30, 80) self:CreateDropDown( 'name', 'Font Shadow', 'default', DEFAULTS.font.shadow, 'getFunc', function() return DB.font.shadow end, 'setFunc', function(value) DB.font.shadow = value; UpdateFont() end, 'values', {OUTLINE = 'Outline', THICKOUTLINE = 'Thick Outline', NONE = 'None'} ):SetPoint('BOTTOMRIGHT', -10, 20) self:CreateCheckBox( 'name', 'Monochrome', 'default', DEFAULTS.font.monochrome, 'getFunc', function() return DB.font.monochrome end, 'setFunc', function(value) DB.font.monochrome = value; UpdateFont() end ):SetPoint('BOTTOMRIGHT', -140, 75) end) LibConfig.AddConfig('Objects', 'pMinimap', function(self) local points = {TOPLEFT = 'Top Left', TOP = 'Top', TOPRIGHT = 'Top Right', LEFT = 'Left', RIGHT = 'Right', BOTTOMLEFT = 'Bottom Left', BOTTOM = 'Bottom', BOTTOMRIGHT = 'Bottom Right'} local offset = 25 for name, default in pairs(DEFAULTS.objects) do self:CreateCheckBox( 'name', name, 'default', default.shown, 'getFunc', function() local o = DB.objects[name]; return o.shown end, 'setFunc', function(value) local o = DB.objects[name]; o.shown = value; DB.objects[name] = o; UpdateObjects() end ):SetPoint('TOPLEFT', 25, -offset) self:CreateDropDown( 'name', name..' Position', 'default', default.point, 'getFunc', function() local o = DB.objects[name]; return o.point end, 'setFunc', function(value) local o = DB.objects[name]; o.point = value; DB.objects[name] = o; UpdateObjects() end, 'values', points ):SetPoint('TOPRIGHT', -10, -offset) offset = offset + 60 end end) LibConfig.AddCommand('pMinimap', '/pmm', '/pminimap')