vanilla-wow-addons – Rev 1
?pathlinks?
FLIGHTMAP_MAX_TAXIPATHS = 48;
FLIGHTMAP_MAX_TAXINODES = 32;
function FlightMapTaxi_SetContinent(cont)
local cname = FlightMapUtil.getContinentName(cont);
TaxiMerchant:SetText(cname);
local tname = "Interface\\TaxiFrame\\TAXIMAP" .. 2-cont;
TaxiMap:SetTexture(tname);
FlightMapTaxiFrame_OnEvent(cont);
end
function FlightMapTaxi_ShowContinent()
if TaxiFrame:IsVisible() then
HideUIPanel(TaxiFrame);
return;
end
TaxiPortrait:SetTexture("Interface\\WorldMap\\WorldMap-Icon");
for i = 1, NUM_TAXI_BUTTONS, 1 do
local btn = getglobal("TaxiButton" .. i);
if btn then btn:Hide(); end
end
-- Get a (non-instanced) continent number
local cont = FlightMapUtil.getContinent();
if cont == 0 then cont = 1; end
-- Must kill "OnShow" handler briefly
local onshow = TaxiFrame:GetScript("OnShow");
TaxiFrame:SetScript("OnShow", function()
PlaySound("igMainMenuOpen");
end);
ShowUIPanel(TaxiFrame, 1);
TaxiFrame:SetScript("OnShow", onshow);
-- Toggle FlightMap/Blizzard stuff
TaxiRouteMap:Hide();
FlightMapTaxiContinents:Show();
-- Then set the continent display
FlightMapTaxi_SetContinent(cont);
UIDropDownMenu_SetSelectedID(FlightMapTaxiContinents, cont);
end
function FlightMapTaxiButton_OnEnter(button)
GameTooltip:SetOwner(button, "ANCHOR_RIGHT");
FlightMapUtil.addFlightsForNode(GameTooltip, button.nodeKey, '',
FlightMapTaxiFrame.sourceKey);
if FlightMapTaxiFrame.sourceNode then
local costs = FlightMapTaxiFrame.sourceNode.Costs;
if costs[button.nodeKey] and costs[button.nodeKey] > 0 then
SetTooltipMoney(GameTooltip, costs[button.nodeKey]);
end
end
GameTooltip:Show();
end
function FlightMapTaxiButton_OnLeave(button)
GameTooltip:Hide();
end
function FlightMapTaxiFrame_OnLoad()
this:RegisterEvent("TAXIMAP_OPENED");
TaxiButtonTypes["UNKNOWN"] = {
file = "Interface\\TaxiFrame\\UI-Taxi-Icon-Gray"
};
end
function FlightMapTaxiFrame_OnEvent(event)
-- Hide any unused lines left over from a previous flight master visit
for i = 1, FLIGHTMAP_MAX_TAXIPATHS, 1 do
getglobal("FlightMapTaxiPath" .. i):Hide();
end
-- Hide any unused icons too
for i = 1, FLIGHTMAP_MAX_TAXINODES, 1 do
getglobal("FlightMapTaxiButton" .. i):Hide();
end
-- If the event isn't "TAXIMAP_OPENED" then this is an
-- anywhere-display map.
local thiscont = event;
if event == "TAXIMAP_OPENED" then
-- Turn the route map back on
TaxiRouteMap:Show();
-- Turn the continent select off
FlightMapTaxiContinents:Hide();
-- Check option is on
if not FlightMap.Opts.fullTaxiMap then return; end
thiscont = FlightMapUtil.getContinent();
end
local map = FlightMapUtil.getFlightMap();
-- Reset these...
FlightMapTaxiFrame.sourceKey = nil;
FlightMapTaxiFrame.sourceNode = nil;
-- So, NumTaxiNodes() returns a value all the time...
local numNodes = NumTaxiNodes();
if event ~= "TAXIMAP_OPENED" then
numNodes = 0;
end
-- Build a list of nodes the Blizzard client has dealt with
local shownNodes = {};
local dontShow = {};
FlightMapTaxiFrame.Destinations = {};
for i = 1, numNodes do
local tx, ty = TaxiNodePosition(i);
local node = FlightMapUtil.makeNodeName(thiscont, tx, ty);
shownNodes[node] = true;
if TaxiNodeGetType(i) == "CURRENT" then
FlightMapTaxiFrame.sourceKey = node;
FlightMapTaxiFrame.sourceNode = map[node];
end
if TaxiNodeGetType(i) == "NONE" then
dontShow[node] = true;
end
FlightMapTaxiFrame.Destinations[node] = i;
end
-- Show the entire flight map as a faint overlay
local seen = {};
local linenum = 1;
local nodenum = 1;
for key, node in map do
-- If it's on this continent, and hasn't been drawn, fill it in
if not shownNodes[key] and node.Continent == thiscont
and (FlightMap.Opts.showAllInfo or FlightMapUtil.knownNode(key)) then
local button = getglobal("FlightMapTaxiButton" .. nodenum);
if button then
nodenum = nodenum + 1;
button:ClearAllPoints();
button:SetPoint("CENTER", "TaxiMap", "BOTTOMLEFT",
node.Location.Taxi.x * TAXI_MAP_WIDTH,
node.Location.Taxi.y * TAXI_MAP_HEIGHT);
button.nodeKey = key;
button.node = node;
if FlightMapUtil.knownNode(key) then
button:SetNormalTexture(TaxiButtonTypes["REACHABLE"].file);
else
button:SetNormalTexture(TaxiButtonTypes["UNKNOWN"].file);
end
button:Show();
end
end
-- Draw all single-hop lines
for k, v in node.Flights do
local tex = getglobal("FlightMapTaxiPath" .. linenum);
if tex and not seen[key .. "-" .. k]
and node.Continent == thiscont and map[k]
and not dontShow[k] and not dontShow[key]
and not (node.Routes and node.Routes[k]) then
linenum = linenum + 1;
seen[key .. "-" .. k] = true;
seen[k .. "-" .. key] = true;
if FlightMap.Opts.showAllInfo
or (FlightMapUtil.knownNode(k)
and FlightMapUtil.knownNode(key)) then
FlightMapUtil.drawLine(TaxiMap, tex,
node.Location.Taxi.x, 1 - node.Location.Taxi.y,
map[k].Location.Taxi.x, 1 - map[k].Location.Taxi.y);
tex:SetAlpha(0.5);
end
end
end
end
end
function FlightMapTaxiContinents_OnLoad()
UIDropDownMenu_Initialize(this, FlightMapTaxiContinents_Initialize);
UIDropDownMenu_SetWidth(130);
end
function FlightMapTaxiContinents_Initialize()
local function init(...)
local info;
for i = 1, arg.n, 1 do
info = {
text = arg[i],
func = FlightMapTaxiContinents_OnClick,
};
UIDropDownMenu_AddButton(info);
end
end
init(GetMapContinents());
end
function FlightMapTaxiContinents_OnClick()
UIDropDownMenu_SetSelectedID(FlightMapTaxiContinents, this:GetID());
FlightMapTaxi_SetContinent(this:GetID());
end