mirror of
https://github.com/MarkuruThunderhoof/RecipeRadar.git
synced 2026-09-22 15:36:57 +00:00
106 lines
3.2 KiB
Lua
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
|