mirror of
https://github.com/MarkuruThunderhoof/RecipeRadar.git
synced 2026-09-22 07:26:56 +00:00
223 lines
5.9 KiB
Lua
223 lines
5.9 KiB
Lua
|
|
-- Maps.lua: generic mapping code and map "base class"
|
|
-- $Id: Maps.lua 443 2006-09-01 04:41:40Z jnmiller $
|
|
|
|
-- Initializes the state of the map overlays and settings.
|
|
function RecipeRadar_Maps_Init()
|
|
|
|
RecipeRadar_Minimap_Init()
|
|
RecipeRadar_Worldmap_Init()
|
|
|
|
RecipeRadar_MappedVendors = { }
|
|
|
|
end
|
|
|
|
-- find the next unused icon; we just check minimap icons since
|
|
-- world/mini icons should always correspond
|
|
function RecipeRadar_Maps_FindNextID()
|
|
|
|
for i = 1, RECIPERADAR_MAPPED_VENDORS_MAX do
|
|
if (not getglobal("RecipeRadarMinimapIcon" .. i).IsMapped) then
|
|
return i
|
|
end
|
|
end
|
|
|
|
return nil
|
|
|
|
end
|
|
|
|
-- Add the given vendor to the list of mapped vendors.
|
|
function RecipeRadar_Maps_AddVendor(vendor, region)
|
|
|
|
if (vendor.IsMapped) then return end -- vendor is already mapped
|
|
|
|
local continent = RecipeRadar_RegionData[region].Continent
|
|
if (continent == 0) then return end -- instance vendor
|
|
|
|
if (not vendor.Coordinates) then
|
|
RecipeRadar_Print("ASSERT FAILED: " .. vendor.Name ..
|
|
" has no coordinates.")
|
|
return
|
|
end
|
|
|
|
local id = RecipeRadar_Maps_FindNextID()
|
|
if (not id) then return end
|
|
|
|
RecipeRadar_Worldmap_AddVendor(id, vendor, region, continent)
|
|
RecipeRadar_Minimap_AddVendor(id, vendor, region)
|
|
|
|
RecipeRadar_MappedVendors[vendor.Name] = id
|
|
vendor.IsMapped = true
|
|
|
|
end
|
|
|
|
-- Unmap the vendor.
|
|
function RecipeRadar_Maps_RemoveVendor(vendor)
|
|
|
|
local id = RecipeRadar_MappedVendors[vendor.Name]
|
|
|
|
RecipeRadar_Minimap_RemoveVendor(id)
|
|
RecipeRadar_Worldmap_RemoveVendor(id)
|
|
|
|
RecipeRadar_MappedVendors[vendor.Name] = nil
|
|
vendor.IsMapped = false
|
|
|
|
end
|
|
|
|
-- Creates and displays the tooltip that displays on mouseover for all
|
|
-- of our maps - minimap, worldmap and our custom Recipe Radar map.
|
|
-- tooltip is the tooltip to draw (eg. GameTooltip), and frame is the
|
|
-- owner button.
|
|
function RecipeRadar_Maps_SetTooltip(tooltip, frame)
|
|
|
|
local line1, line2 = RecipeRadar_GetColoredTeamString(
|
|
frame.Vendor.Team, frame.Vendor.Name)
|
|
local anchor = "ANCHOR_BOTTOMLEFT"
|
|
|
|
local count = table.getn(frame.Vendor.Recipes)
|
|
if (count == 1) then
|
|
line2 = RRS("1 recipe")
|
|
else
|
|
line2 = string.format(RRS("%d recipes"), count)
|
|
end
|
|
|
|
count = RecipeRadar_CountLearnableRecipes(frame.Vendor.Recipes)
|
|
line2 = line2 .. " " .. format(TEXT(PARENS_TEMPLATE),
|
|
format(RRS("%d learnable"), count))
|
|
|
|
-- make sure our tooltip doesn't hit the screen edge
|
|
if (frame:GetLeft() < 200) then
|
|
anchor = "ANCHOR_RIGHT"
|
|
end
|
|
|
|
tooltip:SetOwner(frame, anchor)
|
|
tooltip:SetText(line1)
|
|
tooltip:AddLine(line2)
|
|
if (frame.Vendor.Notes and frame.Vendor.Notes ~= "") then
|
|
tooltip:AddLine(RecipeRadar_FormatVendorNote(frame.Vendor.Notes, true))
|
|
end
|
|
tooltip:Show()
|
|
|
|
end
|
|
|
|
-- OnLoad event handler for the right-click context menu for map buttons.
|
|
function RecipeRadar_Maps_ContextMenuOnLoad()
|
|
|
|
RecipeRadar_ContextMenuGlobal = { }
|
|
UIDropDownMenu_Initialize(this, RecipeRadar_Maps_ContextMenuInit, "MENU")
|
|
|
|
end
|
|
|
|
-- Initialization routine for the right-click context menu for map buttons.
|
|
function RecipeRadar_Maps_ContextMenuInit()
|
|
|
|
local item
|
|
|
|
-- putting in the vendor's name as the title of the popup
|
|
if (RecipeRadar_ContextMenuGlobal.Vendor) then
|
|
item = { }
|
|
item.text = RecipeRadar_ContextMenuGlobal.Vendor.Name
|
|
item.isTitle = 1
|
|
item.notCheckable = 1
|
|
UIDropDownMenu_AddButton(item)
|
|
end
|
|
|
|
item = { }
|
|
item.text = RRS("Unmap Vendor")
|
|
item.value = "unmap"
|
|
item.notCheckable = 1
|
|
item.func = RecipeRadar_Maps_ContextMenuOnClick
|
|
UIDropDownMenu_AddButton(item)
|
|
|
|
item = { }
|
|
item.text = CANCEL
|
|
item.notCheckable = 1
|
|
item.func = RecipeRadar_Maps_ContextMenuOnClick
|
|
UIDropDownMenu_AddButton(item)
|
|
|
|
end
|
|
|
|
-- OnClick event handler for the right-click context menu for map buttons.
|
|
function RecipeRadar_Maps_ContextMenuOnClick()
|
|
|
|
if (this.value == "unmap") then
|
|
RecipeRadar_Maps_RemoveVendor(RecipeRadar_ContextMenuGlobal.Vendor)
|
|
RecipeRadar_FrameUpdate()
|
|
end
|
|
|
|
end
|
|
|
|
-- Changes local (region map) coordinates to absolute coordinates.
|
|
function RecipeRadar_Maps_LocalToAbsolute(local_x, local_y, region)
|
|
|
|
local region = RecipeRadar_RegionData[region]
|
|
if (not region) then return end
|
|
|
|
local absolute_x = local_x * region.MapScale + region.MapOffset.x
|
|
local absolute_y = local_y * region.MapScale + region.MapOffset.y
|
|
|
|
return absolute_x, absolute_y
|
|
|
|
end
|
|
|
|
-- Changes local (region map) coordinates to absolute coordinates.
|
|
function RecipeRadar_Maps_LocalToAbsoluteTable(local_coords, region)
|
|
|
|
local region = RecipeRadar_RegionData[region]
|
|
if (not region) then return end
|
|
|
|
local absolute = { }
|
|
absolute.x = local_coords.x * region.MapScale + region.MapOffset.x
|
|
absolute.y = local_coords.y * region.MapScale + region.MapOffset.y
|
|
|
|
return absolute
|
|
|
|
end
|
|
|
|
-- Map constants (from MapNotes).
|
|
RecipeRadar_MapData = {
|
|
|
|
IndoorZoomRatio = {
|
|
[0] = 1.565,
|
|
[1] = 1.687,
|
|
[2] = 1.882,
|
|
[3] = 2.210,
|
|
[4] = 2.575,
|
|
[5] = 2.651,
|
|
},
|
|
|
|
Worldmap = {
|
|
[1] = {
|
|
Scale = 0.815775262,
|
|
Offset = { x = -0.185568684, y = 0.064012977 },
|
|
},
|
|
[2] = {
|
|
Scale = 0.790967532,
|
|
Offset = { x = 0.371931204, y = 0.081458069 },
|
|
},
|
|
},
|
|
|
|
[1] = {
|
|
Scale = { -- continent scale rates
|
|
[0] = { x = 11016.6, y = 7399.9 },
|
|
[1] = { x = 12897.3, y = 8638.1 },
|
|
[2] = { x = 15478.8, y = 10368.0 },
|
|
[3] = { x = 19321.8, y = 12992.7 },
|
|
[4] = { x = 25650.4, y = 17253.2 },
|
|
[5] = { x = 38787.7, y = 26032.1 },
|
|
}
|
|
},
|
|
|
|
[2] = {
|
|
Scale = { -- continent scale rates
|
|
[0] = { x = 10448.3, y = 7072.7 },
|
|
[1] = { x = 12160.5, y = 8197.8 },
|
|
[2] = { x = 14703.1, y = 9825.0 },
|
|
[3] = { x = 18568.7, y = 12472.2 },
|
|
[4] = { x = 24390.3, y = 15628.5 },
|
|
[5] = { x = 37012.2, y = 25130.6 },
|
|
},
|
|
},
|
|
|
|
}
|