Files

106 lines
3.2 KiB
Lua

-- Worldmap.lua: worldmap vendor plotting code
-- $Id: Worldmap.lua 430 2006-08-22 19:18:01Z jnmiller $
-- Initializes the state of the worldmap overlays and settings.
function RecipeRadar_Worldmap_Init()
for i = 1, RECIPERADAR_MAPPED_VENDORS_MAX do
getglobal("RecipeRadarWorldmapIcon" .. i):Hide()
end
-- this bit hooks the world map's OnHide event to reset the current zone
local map_frame = getglobal("WorldMapFrame")
local on_hide = map_frame:GetScript("OnHide")
if (on_hide) then
map_frame.RecipeRadar_OnHide = on_hide
map_frame:SetScript("OnHide",
function()
this.RecipeRadar_OnHide()
RecipeRadar_Minimap_OnNewRegion()
end)
end
end
-- Map the given icon to the given vendor.
function RecipeRadar_Worldmap_AddVendor(id, vendor, region, continent)
local button = getglobal("RecipeRadarWorldmapIcon" .. id)
button.Vendor = vendor
button.Continent = continent
button.RegionName = region
button.RegionID = RecipeRadar_RegionNameToID(region, continent)
button.IsMapped = true
end
-- Resets and unmaps the given icon.
function RecipeRadar_Worldmap_RemoveVendor(id)
local button = getglobal("RecipeRadarWorldmapIcon" .. id)
button.Vendor = nil
button.RegionID = nil
button.Continent = nil
button.IsMapped = false
button:Hide()
end
-- Calls TranslateCoords() on all active icons.
function RecipeRadar_Worldmap_UpdateButtons()
for i = 1, RECIPERADAR_MAPPED_VENDORS_MAX do
local button = getglobal("RecipeRadarWorldmapIcon" .. i)
if (button.IsMapped) then
RecipeRadar_Worldmap_TranslateCoords(button)
end
end
end
-- Plot a vendor - called iteratively on the MappedVendors table.
function RecipeRadar_Worldmap_TranslateCoords(button)
local cont, zone = GetCurrentMapContinent(), GetCurrentMapZone()
-- map is showing the vendor's region, so no translation is needed
if (cont == button.Continent and zone == button.RegionID) then
-- only mapping the first coordinate in our database
RecipeRadar_Worldmap_PlotVendor(button, button.Vendor.Coordinates[1])
-- map is showing the vendor's continent, so perform absolute translation
elseif (cont == button.Continent and zone == 0) then
local coords = RecipeRadar_Maps_LocalToAbsoluteTable(
button.Vendor.Coordinates[1], button.RegionName)
RecipeRadar_Worldmap_PlotVendor(button, coords)
-- worldmap is shown, so perform absolute/division translation
elseif (cont == 0 and zone == 0) then
local trans = RecipeRadar_MapData.Worldmap[button.Continent]
local coords = RecipeRadar_Maps_LocalToAbsoluteTable(
button.Vendor.Coordinates[1], button.RegionName)
coords.x = coords.x * trans.Scale + trans.Offset.x
coords.y = coords.y * trans.Scale + trans.Offset.y
RecipeRadar_Worldmap_PlotVendor(button, coords)
else
button:Hide()
end
end
-- Plot a vendor - convert x, y to WorldMapDetailFrame coordinates.
function RecipeRadar_Worldmap_PlotVendor(button, coords)
local x = coords.x * WorldMapDetailFrame:GetWidth()
local y = -coords.y * WorldMapDetailFrame:GetHeight()
button:SetPoint("CENTER", "WorldMapDetailFrame", "TOPLEFT", x, y)
button:Show()
end