From 4e1f50035e860a00636ca5d804c267119df99601 Mon Sep 17 00:00:00 2001 From: Kahrl Date: Sun, 11 Aug 2013 04:09:45 +0200 Subject: Omnicleanup: header cleanup, add ModApiUtil shared between game and mainmenu --- src/emerge.cpp | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 52 insertions(+), 5 deletions(-) (limited to 'src/emerge.cpp') diff --git a/src/emerge.cpp b/src/emerge.cpp index f97763718..a81ff7d92 100644 --- a/src/emerge.cpp +++ b/src/emerge.cpp @@ -19,12 +19,14 @@ with this program; if not, write to the Free Software Foundation, Inc., */ +#include "emerge.h" #include "server.h" #include #include -#include "clientserver.h" #include "map.h" -#include "jmutexautolock.h" +#include "environment.h" +#include "util/container.h" +#include "util/thread.h" #include "main.h" #include "constants.h" #include "voxel.h" @@ -32,12 +34,11 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mapblock.h" #include "serverobject.h" #include "settings.h" -#include "cpp_api/scriptapi.h" +#include "scripting_game.h" #include "profiler.h" #include "log.h" #include "nodedef.h" #include "biome.h" -#include "emerge.h" #include "mapgen_v6.h" #include "mapgen_v7.h" #include "mapgen_indev.h" @@ -45,6 +46,46 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mapgen_math.h" +class EmergeThread : public SimpleThread +{ +public: + Server *m_server; + ServerMap *map; + EmergeManager *emerge; + Mapgen *mapgen; + bool enable_mapgen_debug_info; + int id; + + Event qevent; + std::queue blockqueue; + + EmergeThread(Server *server, int ethreadid): + SimpleThread(), + m_server(server), + map(NULL), + emerge(NULL), + mapgen(NULL), + id(ethreadid) + { + } + + void *Thread(); + + void trigger() + { + setRun(true); + if(IsRunning() == false) + { + Start(); + } + } + + bool popBlockEmerge(v3s16 *pos, u8 *flags); + bool getBlockOrStartGen(v3s16 p, MapBlock **b, + BlockMakeData *data, bool allow_generate); +}; + + /////////////////////////////// Emerge Manager //////////////////////////////// EmergeManager::EmergeManager(IGameDef *gamedef) { @@ -183,6 +224,11 @@ Mapgen *EmergeManager::getCurrentMapgen() { } +void EmergeManager::triggerAllThreads() { + for (unsigned int i = 0; i != emergethread.size(); i++) + emergethread[i]->trigger(); +} + bool EmergeManager::enqueueBlockEmerge(u16 peer_id, v3s16 p, bool allow_generate) { std::map::const_iterator iter; BlockEmergeData *bedata; @@ -466,7 +512,8 @@ void *EmergeThread::Thread() { ign(&m_server->m_ignore_map_edit_events_area, VoxelArea(minp, maxp)); { // takes about 90ms with -O1 on an e3-1230v2 - SERVER_TO_SA(m_server)->environment_OnGenerated( + m_server->getScriptIface()-> + environment_OnGenerated( minp, maxp, emerge->getBlockSeed(minp)); } -- cgit v1.2.3