moved on_construct calls to after writing of mapgen

This commit is contained in:
Sokomine 2014-09-24 23:44:34 +02:00
parent 70798ce745
commit 6e583f99a9
2 changed files with 27 additions and 17 deletions

View File

@ -781,6 +781,11 @@ t1 = time_elapsed( t1, 'place_buildings' );
mg_villages.place_dirt_roads( village, tmin, tmax, data, param2_data, a, village_noise, c_feldweg);
t1 = time_elapsed( t1, 'place_dirt_roads' );
-- grow trees which are part of buildings into saplings
for _,v in ipairs( village.to_add_data.extra_calls.trees ) do
mg_villages.grow_a_tree( v, v.typ, minp, maxp, data, a, cid, pr );
end
end
mg_villages.village_area_fill_with_plants( village_area, villages, tmin, tmax, data, param2_data, a, cid );
@ -799,6 +804,20 @@ t1 = time_elapsed( t1, 'vm calc lighting' );
vm:write_to_map(data)
t1 = time_elapsed( t1, 'vm data written' );
-- do on_construct calls AFTER the map data has been written - else i.e. realtest fences can not update themshevles
for _, village in ipairs(villages) do
for k, v in pairs( village.to_add_data.extra_calls.on_constr ) do
local node_name = minetest.get_name_from_content_id( k );
if( minetest.registered_nodes[ node_name ].on_construct ) then
for _, pos in ipairs(v) do
minetest.registered_nodes[ node_name ].on_construct( pos );
end
end
end
end
-- TODO: extra_calls.chests, extra_calls.signs
-- initialize the pseudo random generator so that the chests will be filled in a reproducable pattern
local pr = PseudoRandom(mg_villages.get_bseed(minp));
local meta

View File

@ -786,6 +786,13 @@ local function generate_building(pos, minp, maxp, data, param2_data, a, pr, extr
if( replacements.table[ t.node.name ] and minetest.registered_nodes[ replacements.table[ t.node.name ]]) then
new_content = minetest.get_content_id( replacements.table[ t.node.name ] );
if( minetest.registered_nodes[ replacements.table[ t.node.name ]].on_construct ) then
if( not( extra_calls.on_constr[ new_content ] )) then
extra_calls.on_constr[ new_content ] = { {x=ax, y=ay, z=az}};
else
table.insert( extra_calls.on_constr[ new_content ], {x=ax, y=ay, z=az});
end
end
-- we tried our best, but the replacement node is not defined
else
print('[mg_villages] ERROR: Did not find a suitable replacement for '..tostring( t.node.name )..' (suggested but inexistant: '..tostring( replacements.table[ t.node.name ] )..').');
@ -1187,25 +1194,9 @@ mg_villages.place_buildings = function(village, minp, maxp, data, param2_data, a
generate_building(pos, minp, maxp, data, param2_data, a, pr_village, extranodes, replacements, cid, extra_calls )
end
-- call on_oncstruct for all nodes that need it
for k, v in pairs( extra_calls.on_constr ) do
local node_name = minetest.get_name_from_content_id( k );
if( minetest.registered_nodes[ node_name ].on_construct ) then
for _, pos in ipairs(v) do
minetest.registered_nodes[ node_name ].on_construct( pos );
end
end
end
-- grow trees into saplings
for _,v in ipairs( extra_calls.trees ) do
mg_villages.grow_a_tree( v, v.typ, minp, maxp, data, a, cid, pr );
end
-- replacements are in list format for minetest.place_schematic(..) type spawning
return { extranodes = extranodes, bpos = bpos, replacements = replacements.list, dirt_roads = village.to_add_data.dirt_roads,
plantlist = village.to_add_data.plantlist };
plantlist = village.to_add_data.plantlist, extra_calls = extra_calls };
end