provide functions to get paths to/from beds from path_info
This commit is contained in:
parent
cf6fe089d6
commit
6f7a6118f7
@ -695,23 +695,72 @@ mg_villages.transform_coordinates = function( pos, bpos )
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
mg_villages.get_entrance_list = function( village_id, plot_nr )
|
mg_villages.get_plot_and_building_data = function( village_id, plot_nr )
|
||||||
if( not( mg_villages.all_villages[ village_id ])
|
if( not( mg_villages.all_villages[ village_id ])
|
||||||
or not( mg_villages.all_villages[ village_id ].to_add_data.bpos[ plot_nr ] )) then
|
or not( mg_villages.all_villages[ village_id ].to_add_data.bpos[ plot_nr ] )) then
|
||||||
return {};
|
return;
|
||||||
end
|
end
|
||||||
local bpos = mg_villages.all_villages[ village_id ].to_add_data.bpos[ plot_nr ];
|
local bpos = mg_villages.all_villages[ village_id ].to_add_data.bpos[ plot_nr ];
|
||||||
local building_data = mg_villages.BUILDINGS[ bpos.btype ];
|
if( not( bpos ) or not( bpos.btype ) or not( mg_villages.BUILDINGS[ bpos.btype ])) then
|
||||||
if( not( building_data ) or not(building_data.all_entrances )) then
|
return;
|
||||||
|
end
|
||||||
|
return { bpos = bpos, building_data = mg_villages.BUILDINGS[ bpos.btype ]};
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
mg_villages.get_entrance_list = function( village_id, plot_nr )
|
||||||
|
local res = mg_villages.get_plot_and_building_data( village_id, plot_nr );
|
||||||
|
if( not( res ) or not( res.building_data ) or not(res.building_data.all_entrances )) then
|
||||||
return {};
|
return {};
|
||||||
end
|
end
|
||||||
local entrance_list = {};
|
local entrance_list = {};
|
||||||
for i,e in ipairs( building_data.all_entrances ) do
|
for i,e in ipairs( res.building_data.all_entrances ) do
|
||||||
table.insert( entrance_list, mg_villages.transform_coordinates( e, bpos ));
|
table.insert( entrance_list, mg_villages.transform_coordinates( e, res.bpos ));
|
||||||
end
|
end
|
||||||
return entrance_list;
|
return entrance_list;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
mg_villages.get_path_from_bed_to_outside = function( village_id, plot_nr, bed_nr, door_nr )
|
||||||
|
local res = mg_villages.get_plot_and_building_data( village_id, plot_nr );
|
||||||
|
if( not( res ) or not( res.building_data ) or not(res.building_data.short_file_name)
|
||||||
|
or not( mg_villages.path_info[ res.building_data.short_file_name ] )
|
||||||
|
or not( mg_villages.path_info[ res.building_data.short_file_name ][ door_nr ])
|
||||||
|
or not( mg_villages.path_info[ res.building_data.short_file_name ][ door_nr ][ bed_nr ])) then
|
||||||
|
return;
|
||||||
|
end
|
||||||
|
local path = {};
|
||||||
|
-- get the path from the bed to front door door_nr
|
||||||
|
for i,p in ipairs( mg_villages.path_info[ res.building_data.short_file_name ][ door_nr ][ bed_nr ]) do
|
||||||
|
table.insert( path, mg_villages.transform_coordinates( p, res.bpos ));
|
||||||
|
end
|
||||||
|
local rest_path_id = #mg_villages.path_info[ res.building_data.short_file_name ][ door_nr ];
|
||||||
|
-- the last entrance is the common path for all beds from the front door door_nr to the outside
|
||||||
|
if( rest_path_id == bed_nr ) then
|
||||||
|
return path;
|
||||||
|
end
|
||||||
|
-- add the path from the front door to the front of the building
|
||||||
|
for i,p in ipairs( mg_villages.path_info[ res.building_data.short_file_name ][ door_nr ][ rest_path_id ]) do
|
||||||
|
table.insert( path, mg_villages.transform_coordinates( p, res.bpos ));
|
||||||
|
end
|
||||||
|
return path;
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- door_nr ought to be 1 in most cases (unless the mob is standing in front of another door)
|
||||||
|
mg_villages.get_path_from_outside_to_bed = function( village_id, plot_nr, bed_nr, door_nr )
|
||||||
|
local path = mg_villages.get_path_from_bed_to_outside( village_id, plot_nr, bed_nr, door_nr );
|
||||||
|
if( not( path )) then
|
||||||
|
return path;
|
||||||
|
end
|
||||||
|
local reverse_path = {};
|
||||||
|
for i = #path, 1, -1 do
|
||||||
|
table.insert( reverse_path, path[i]);
|
||||||
|
end
|
||||||
|
return reverse_path;
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
-- get the information mg_villages has about a mob (useful for mg_villages:mob_spawner)
|
-- get the information mg_villages has about a mob (useful for mg_villages:mob_spawner)
|
||||||
mg_villages.inhabitants.get_mob_data = function( village_id, plot_nr, bed_nr )
|
mg_villages.inhabitants.get_mob_data = function( village_id, plot_nr, bed_nr )
|
||||||
if( not( village_id ) or not( plot_nr ) or not( bed_nr )
|
if( not( village_id ) or not( plot_nr ) or not( bed_nr )
|
||||||
@ -720,6 +769,16 @@ mg_villages.inhabitants.get_mob_data = function( village_id, plot_nr, bed_nr )
|
|||||||
or not( mg_villages.all_villages[ village_id ].to_add_data.bpos[ plot_nr ].beds )) then
|
or not( mg_villages.all_villages[ village_id ].to_add_data.bpos[ plot_nr ].beds )) then
|
||||||
return;
|
return;
|
||||||
end
|
end
|
||||||
|
--[[
|
||||||
|
-- TODO: mark entrances for manual inspection
|
||||||
|
for i,p in ipairs( mg_villages.get_entrance_list( village_id, plot_nr )) do
|
||||||
|
local bpos = mg_villages.all_villages[ village_id ].to_add_data.bpos[ plot_nr ];
|
||||||
|
minetest.chat_send_player("singleplayer","door: "..minetest.pos_to_string( p )..
|
||||||
|
" pos: "..minetest.pos_to_string( bpos )..
|
||||||
|
" o: "..tostring( bpos.o ).." r: "..tostring( bpos.brotate ).." m: "..tostring( bpos.mirror));
|
||||||
|
minetest.set_node( p, {name="wool:cyan",param2=0});
|
||||||
|
end
|
||||||
|
--]]
|
||||||
return mg_villages.all_villages[ village_id ].to_add_data.bpos[ plot_nr ].beds[ bed_nr ];
|
return mg_villages.all_villages[ village_id ].to_add_data.bpos[ plot_nr ].beds[ bed_nr ];
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user