view WhistleMaster.lua @ 0:06d230725448

Initial build of WhistleMaster
author Geoff Brock <mischivin@gmail.com>
date Mon, 24 Oct 2016 15:41:49 -0400
parents
children 4402edd42a3f
line wrap: on
line source

function WM_Debug() 
	print("debug text")
end

--indexes corrispond to map IDs that contain valid flight points for the Flight Masters Whistle
local validIDs = { [1014] = true, [1015] = true, [1017] = true, [1018] = true, [1024] = true, [1033] = true, [1096] = true }

local WhistleLoc = CreateFrame("FRAME", "WhistleLOC", WorldMapPOIFrame)
WhistleLoc:SetSize(64, 64)
WhistleLoc:SetPoint("CENTER", 0, 0)
WhistleLoc:Show()

--[[local Rotate = WhistleLoc:CreateTexture()
Rotate:SetTexture("Interface\minimap\UI-Minimap-Ping-Rotate")
Rotate:SetPoint("CENTER")
Rotate:SetSize(48, 48)
Rotate:SetVertexColor(0.9, 0.1, 0.1)

local Ring = WhistleLoc:CreateTexture()
Ring:SetTexture("Interface\minimap\UI-Minimap-Ping-Center")
Ring:SetPoint("CENTER")
Ring:SetSize(32, 32)
Ring:SetVertexColor(0.9, 0.1, 0.1)]]




local function GetDistance(nX, nY)
	local pX, pY = GetPlayerMapPosition("player")

	local dX = pX - nX
    local dY = pY - nY
 
	return math.sqrt( ( dX^2 ) + ( dY^2 ) )
end

local function GetNode()
	local node
	local distance
	local index
	for k = 1, GetNumMapLandmarks() do
		local n = {}
		n.type, n.name, n.description, n.textureIndex, n.x, n.y = GetMapLandmarkInfo(k)
		if n.type == LE_MAP_LANDMARK_TYPE_TAXINODE then --LE_MAP_LANDMARK_TYPE_TAXINODE is a constant defined by Blizzard
			local d = GetDistance(n.x, n.y)
			if distance == nil or d < distance then
				n.index = k
				distance = d
				node = n
			end
		end
	end
	print("The closest node is... " .. node.name)
	return node
end

local function UpdateWhistleMaster()
	if GetCurrentMapContinent() == 8 and validIDs[ select(1, GetCurrentMapAreaID() ) ] then
		local closest = GetNode()
		WhistleLoc:SetPoint("CENTER", "WorldMapFramePOI" .. closest.index, 0, 0)
		WhistleLoc:Show()
		WhistlePing.Ping:Play()
	else
		WhistleLoc:Hide()
		WhistlePing.Ping:Stop()
		print("wrong continent for whistle master")
	end
end

local mapVisible = false

local function EventHandler(self, event, ...)
	if ( (event == "WORLD_MAP_UPDATE") and WorldMapFrame:IsVisible() ) then
		mapVisible = true
		UpdateWhistleMaster()
	end
	if ( (mapVisible) and not WorldMapFrame:IsVisible() ) then
 		mapVisible = false
 	end
end



local WhistleMaster = CreateFrame("FRAME", "WhistleMaster", WorldMapPOIFrame)
WhistleMaster:RegisterEvent("WORLD_MAP_UPDATE")
WhistleMaster:SetScript("OnEvent", EventHandler)