From a6ca7eb29dcd729cf4ac6f1446b5b3e8589b3872 Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Thu, 29 Mar 2012 01:22:08 +0300 Subject: Area-based MapEditEvent ignore and that put to use for on_generate too --- src/server.cpp | 51 +++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 43 insertions(+), 8 deletions(-) (limited to 'src/server.cpp') diff --git a/src/server.cpp b/src/server.cpp index 3aa0bd04b..a8267b1f1 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -82,6 +82,31 @@ private: bool *m_flag; }; +class MapEditEventAreaIgnorer +{ +public: + MapEditEventAreaIgnorer(VoxelArea *ignorevariable, const VoxelArea &a): + m_ignorevariable(ignorevariable) + { + if(m_ignorevariable->getVolume() == 0) + *m_ignorevariable = a; + else + m_ignorevariable = NULL; + } + + ~MapEditEventAreaIgnorer() + { + if(m_ignorevariable) + { + assert(m_ignorevariable->getVolume() != 0); + *m_ignorevariable = VoxelArea(); + } + } + +private: + VoxelArea *m_ignorevariable; +}; + void * ServerThread::Thread() { ThreadStarted(); @@ -279,24 +304,32 @@ void * EmergeThread::Thread() /* Do some post-generate stuff */ - + v3s16 minp = data.blockpos_min*MAP_BLOCKSIZE; v3s16 maxp = data.blockpos_max*MAP_BLOCKSIZE + v3s16(1,1,1)*(MAP_BLOCKSIZE-1); - scriptapi_environment_on_generated(m_server->m_lua, - minp, maxp, mapgen::get_blockseed(data.seed, minp)); - if(enable_mapgen_debug_info) - infostream<<"EmergeThread: ended up with: " - <m_ignore_map_edit_events); + //MapEditEventIgnorer ign(&m_server->m_ignore_map_edit_events); + MapEditEventAreaIgnorer ign( + &m_server->m_ignore_map_edit_events_area, + VoxelArea(minp, maxp)); + { + TimeTaker timer("on_generated"); + scriptapi_environment_on_generated(m_server->m_lua, + minp, maxp, mapgen::get_blockseed(data.seed, minp)); + int t = timer.stop(true); + dstream<<"on_generated took "<m_env->activateBlock(block, 0); }while(false); @@ -3169,6 +3202,8 @@ void Server::onMapEditEvent(MapEditEvent *event) //infostream<<"Server::onMapEditEvent()"<getArea())) + return; MapEditEvent *e = event->clone(); m_unsent_map_edit_queue.push_back(e); } -- cgit v1.2.3