VuhDoMinimap = { ["Create"] = function(self, someModSettings, someInitSettings) if VuhDoMinimapButton then return; end local tFrame = CreateFrame("Button", "VuhDoMinimapButton", Minimap); tFrame:SetWidth(31); tFrame:SetHeight(31); tFrame:SetFrameStrata("LOW"); tFrame:SetToplevel(true); tFrame:SetHighlightTexture("Interface\\Minimap\\UI-Minimap-ZoomButton-Highlight"); tFrame:SetPoint("TOPLEFT", Minimap, "TOPLEFT"); local tIcon = tFrame:CreateTexture("VuhDoMinimapButtonIcon", "BACKGROUND"); tIcon:SetTexture(VUHDO_STANDARD_ICON); tIcon:SetWidth(20); tIcon:SetHeight(20); tIcon:SetPoint("TOPLEFT", tFrame, "TOPLEFT", 7, -5); local tOverlay = tFrame:CreateTexture("VuhDoMinimapButtonOverlay", "OVERLAY"); tOverlay:SetTexture("Interface\\Minimap\\MiniMap-TrackingBorder"); tOverlay:SetWidth(53); tOverlay:SetHeight(53); tOverlay:SetPoint("TOPLEFT", tFrame, "TOPLEFT") tFrame:RegisterForClicks("LeftButtonUp", "RightButtonUp"); tFrame:SetScript("OnClick", self.OnClick); tFrame:SetScript("OnMouseDown", self.OnMouseDown); tFrame:SetScript("OnMouseUp", self.OnMouseUp); tFrame:SetScript("OnEnter", self.OnEnter); tFrame:SetScript("OnLeave", self.OnLeave); tFrame:RegisterForDrag("LeftButton"); tFrame:SetScript("OnDragStart", self.OnDragStart); tFrame:SetScript("OnDragStop", self.OnDragStop); if not someModSettings["position"] then someModSettings["drag"] = someInitSettings["drag"]; someModSettings["position"] = someInitSettings["position"]; end tFrame["modSettings"] = someModSettings; self:Move(); end, ["Move"] = function(self) local tXPos, tYPos; local tAngle = VuhDoMinimapButton["modSettings"]["position"]; --[[if (VuhDoMinimapButton["modSettings"]["drag"] == "SQUARE") then tXPos = 110 * cos(tAngle); tYPos = 110 * sin(tAngle); tXPos = math.max(-82, math.min(tXPos, 84)); tYPos = math.max(-86, math.min(tYPos, 82)); else]] tXPos = 80 * cos(tAngle); tYPos = 80 * sin(tAngle); --end VuhDoMinimapButton:SetPoint("TOPLEFT", "Minimap", "TOPLEFT", 54 - tXPos, tYPos - 54); end, -- Internal functions: do not call anything below here ["OnMouseDown"] = function(self) _G[self:GetName().."Icon"]:SetTexCoord(0, 1, 0, 1); end, ["OnMouseUp"] = function(self) _G[self:GetName().."Icon"]:SetTexCoord(0.05, 0.95, 0.05, 0.95); end, ["OnEnter"] = function(self) if not GameTooltip:IsForbidden() then GameTooltip_SetDefaultAnchor(GameTooltip, UIParent); GameTooltip:AddLine("VuhDo"); GameTooltip:AddLine(VUHDO_I18N_MM_TOOLTIP, 0.8, 0.8, 0.8, 1); GameTooltip:Show(); end end, ["OnLeave"] = function(self) if not GameTooltip:IsForbidden() then GameTooltip:Hide() end end, ["OnDragStart"] = function(self) self:LockHighlight(); self:SetScript("OnUpdate", VuhDoMinimap.OnUpdate); end, ["OnDragStop"] = function(self) self:SetScript("OnUpdate", nil); self:UnlockHighlight(); end, ["OnUpdate"] = function(self) local tXPos, tYPos = GetCursorPosition(); local tXMin, tYMin = Minimap:GetLeft(), Minimap:GetBottom(); tXPos = tXMin - tXPos / Minimap:GetEffectiveScale() + 70; tYPos = tYPos / Minimap:GetEffectiveScale() - tYMin - 70; self["modSettings"]["position"] = math.deg(math.atan2(tYPos, tXPos)); VuhDoMinimap:Move(); end, ["OnClick"] = function(self, aButtonName) if "LeftButton" == aButtonName then VUHDO_slashCmd("opt"); elseif "RightButton" == aButtonName then ToggleDropDownMenu(1, nil, VuhDoMinimapDropDown, "VuhDoMinimapButton", 0, -5); end end }