Navigation menu
Personal tools
Not logged in
Talk
Contributions
Create account
Log in
Namespaces
WoW
Talk
English
Views
Read
Edit
History
More
Search
Navigation
Home
Random page
Help using wiki
Editions
for WoW
for WildStar
for Solar2D
Documentation
for WoW
for WildStar
Reference
WoW
⦁ FrameXML
⦁ AddOns
⦁ API
⦁ WoW Lua
WildStar
⦁ AddOns
⦁ API
⦁ WildStar Lua
Engine
Tools
What links here
Related changes
Special pages
Page information
Site
Recent Changes
Editing
WoW:USERAPI GetMinimapShape
(section)
Jump to navigation
Jump to search
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{userapi}} GetMinimapShape is a function that is declared by the currently running minimap addon to provide information about what shape it is, in case other addons need to deal with the minimap's borders. It takes no arguments and returns one of the following strings: ; "ROUND" : standard shape, round. This is to be assumed if an unknown string is returned or if no string is returned or if GetMinimapShape does not exist. ; "SQUARE" : square shape. ; "CORNER-TOPLEFT" : square, but with the top-left corner being round. This would normally be put at the bottom-right of the screen. ; "CORNER-TOPRIGHT" : square, but with the top-right corner being round. This would normally be put at the bottom-left of the screen. ; "CORNER-BOTTOMLEFT" : square, but with the bottom-left corner being round. This would normally be put at the top-right of the screen. ; "CORNER-BOTTOMRIGHT" : square, but with the bottom-right corner being round. This would normally be put at the top-left of the screen. ; "SIDE-LEFT" : square on the right side, rounded on the left side. This would normally be put at the right of the screen. ; "SIDE-RIGHT" : square on the left side, rounded on the right side. This would normally be put at the left of the screen. ; "SIDE-TOP" : square on the bottom side, rounded on the top side. This would normally be put at the bottom of the screen. ; "SIDE-BOTTOM" : square on the top side, rounded on the bottom side. This would normally be put at the top of the screen. ; "TRICORNER-TOPLEFT" : round, but with the bottom-right corner being square. This would normally be put at the bottom-right of the screen. ; "TRICORNER-TOPRIGHT" : round, but with the bottom-left corner being square. This would normally be put at the bottom-left of the screen. ; "TRICORNER-BOTTOMLEFT" : round, but with the top-right corner being square. This would normally be put at the top-right of the screen. ; "TRICORNER-BOTTOMRIGHT" : round, but with the top-left corner being square. This would normally be put at the top-left of the screen. It is possible this function will be called once a frame, so it is recommended not to do anything CPU-intensive in calculating the shape. This is currently used by [http://www.wowace.com/wiki/FuBarPlugin-2.0 FuBarPlugin-2.0] to determine position of minimap buttons.<br /> This is currently used by [http://www.wowace.com/wiki/Cartographer/Notes Cartographer_Notes] to determine edge position of notes on the minimap.<br /> This is currently used by [[MobileMinimapButtons]] to determine position of draggable minimap buttons.<br /> This is the code currently used by FuBarPlugin-2.0 to determine position on the edge of a minimap: local angle = math.rad(position) -- determine position on your own local minimapShape = GetMinimapShape and GetMinimapShape() or "ROUND" local cos = math.cos(angle) local sin = math.sin(angle) local round = true if minimapShape == "ROUND" then -- do nothing elseif minimapShape == "SQUARE" then round = false elseif minimapShape == "CORNER-TOPRIGHT" then if cos < 0 or sin < 0 then round = false end elseif minimapShape == "CORNER-TOPLEFT" then if cos > 0 or sin < 0 then round = false end elseif minimapShape == "CORNER-BOTTOMRIGHT" then if cos < 0 or sin > 0 then round = false end elseif minimapShape == "CORNER-BOTTOMLEFT" then if cos > 0 or sin > 0 then round = false end elseif minimapShape == "SIDE-LEFT" then if cos > 0 then round = false end elseif minimapShape == "SIDE-RIGHT" then if cos < 0 then round = false end elseif minimapShape == "SIDE-TOP" then if sin > 0 then round = false end elseif minimapShape == "SIDE-BOTTOM" then if sin < 0 then round = false end elseif minimapShape == "TRICORNER-TOPRIGHT" then if cos < 0 and sin > 0 then round = false end elseif minimapShape == "TRICORNER-TOPLEFT" then if cos > 0 and sin > 0 then round = false end elseif minimapShape == "TRICORNER-BOTTOMRIGHT" then if cos < 0 and sin < 0 then round = false end elseif minimapShape == "TRICORNER-BOTTOMLEFT" then if cos > 0 and sin < 0 then round = false end end local x,y if round then x = cos * 80 y = sin * 80 else x = 110 * cos y = 110 * sin x = math.max(-82, math.min(x, 84)) y = math.max(-86, math.min(y, 82)) end frame:SetPoint("CENTER", Minimap, "CENTER", x, y) This is the a conversion table used by [[MobileMinimapButtons]] to shorten the previous code, add radius functionality and make the square corner rounding more flexible: local MinimapShapes = { -- quadrant booleans (same order as SetTexCoord) -- {bottom-right, bottom-left, top-right, top-left} -- true = rounded, false = squared ["ROUND"] = {true, true, true, true }, ["SQUARE"] = {false, false, false, false}, ["CORNER-TOPLEFT"] = {false, false, false, true }, ["CORNER-TOPRIGHT"] = {false, false, true, false}, ["CORNER-BOTTOMLEFT"] = {false, true, false, false}, ["CORNER-BOTTOMRIGHT"] = {true, false, false, false}, ["SIDE-LEFT"] = {false, true, false, true }, ["SIDE-RIGHT"] = {true, false, true, false}, ["SIDE-TOP"] = {false, false, true, true }, ["SIDE-BOTTOM"] = {true, true, false, false}, ["TRICORNER-TOPLEFT"] = {false, true, true, true }, ["TRICORNER-TOPRIGHT"] = {true, false, true, true }, ["TRICORNER-BOTTOMLEFT"] = {true, true, false, true }, ["TRICORNER-BOTTOMRIGHT"] = {true, true, true, false}, } function UpdateButtonPosition(position, radius, rounding) if not radius then radius = 80 end if not rounding then rounding = 10 end local angle = math.rad(position) -- determine position on your own local x, y local cos = math.cos(angle) local sin = math.sin(angle) local q = 1; if cos < 0 then q = q + 1; -- lower end if sin > 0 then q = q + 2; -- right end local minimapShape = GetMinimapShape and GetMinimapShape() or "ROUND" local quadTable = MinimapShapes[minimapShape]; if quadTable[q] then x = cos*radius; y = sin*radius; else local diagRadius = math.sqrt(2*(radius)^2)-rounding x = math.max(-radius, math.min(cos*diagRadius, radius)) y = math.max(-radius, math.min(sin*diagRadius, radius)) end frame:SetPoint("CENTER", Minimap, "CENTER", x, y) end
Summary:
Please note that all contributions to AddOn Studio are considered to be released under the Creative Commons Attribution-NonCommercial-ShareAlike (see
AddOn Studio Wiki:Copyrights
for details).
Submissions must be written by you, or copied from a public domain or similar free resource (see
AddOn Studio Wiki:Copyrights
for details).
Cancel
Editing help
(opens in new window)