diff 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 diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WhistleMaster.lua	Mon Oct 24 15:41:49 2016 -0400
@@ -0,0 +1,88 @@
+
+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)
+