This page documents a user-defined function that you can copy and paste into your addon. Replace <PREFIX> with your AddOn's prefix to avoid conflicts between different versions of these functions.
User defined functions < GetPlayerBearing

Returns the player's current facing bearing based on the rotation of the minimap arrow.

bearing = GetPlayerBearing();

Return valuesEdit

number - The player's current bearing (in Radians).

Example ImplementationEdit

local GetPlayerBearing;--	Local definition, remove to make global
	local math=math;--			Local pointer to the Math library
	local mmring=MinimapCompassTexture;--	Pointer to the Compass Ring
	local mmarrow;--			Upvalue to hold the pointer to the Player Arrow

--	Scan for Player Arrow Texture
	local list={Minimap:GetRegions()};
	for i,j in pairs(list) do
--		Scan for a no-name texture with a specific file loaded.
		if j:IsObjectType("Texture") and not j:GetName() and j:GetTexture():lower()=="interface\\minimap\\minimaparrow" then
			mmarrow=j;--	Found it, save and stop scanning

--	Function definition
		local obj=GetCVar("rotateMinimap")=="1" and mmring or mmarrow;--	Use the correct texture
		if not obj then return 0; end--						Hopefully this doesn't happen

		local fx,fy,bx,by=obj:GetTexCoord();--	Only need front and back of one side (left is returned first)
		local a,dx,dy=0,fx-bx,by-fy;--		Y-Axis flipped for textures so Y values are swapped
		if obj==mmring then dx=-dx; end--	Compass Ring spins the opposite direction
		if dy==0 then--				Can't divide by zero
			a=dx<0 and math.pi or 0;--	Could either be one or the other in this condition
			a=math.atan(dx/dy)+(dy<0 and math.pi or 0);--	atan() only returns half of the values we need, add PI when needed

		return a;

Notes Edit

The old code posted here broke due to a change in the Minimap object. The player arrow shown is no longer a Model frame, it's a Texture now. Also note atan() is not the same function as math.atan, the first returns in Degrees while the later returns in Radians.

Due to the returns on math.atan(), the range this function returns with is between -0.5*PI and 1.5*PI

Ad blocker interference detected!

Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.