From 89f7dc1efd6b0062b4b9e5c3509c301ccadb7a13 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sun, 9 Feb 2014 16:36:30 -0500 Subject: [PATCH] ServerEnvironment: Remove direct dependency on EmergeManager --- src/emerge.h | 10 +--------- src/environment.cpp | 9 ++------- src/environment.h | 6 +----- src/map.cpp | 16 ++++++++++++++-- src/map.h | 8 ++++++++ src/server.cpp | 2 +- 6 files changed, 27 insertions(+), 24 deletions(-) diff --git a/src/emerge.h b/src/emerge.h index 14a2728ba..f3bafc8c8 100644 --- a/src/emerge.h +++ b/src/emerge.h @@ -70,15 +70,7 @@ struct BlockEmergeData { u8 flags; }; -class IBackgroundBlockEmerger -{ -public: - virtual bool enqueueBlockEmerge(u16 peer_id, v3s16 p, - bool allow_generate) = 0; - virtual ~IBackgroundBlockEmerger() {} -}; - -class EmergeManager : public IBackgroundBlockEmerger { +class EmergeManager { public: INodeDefManager *ndef; diff --git a/src/environment.cpp b/src/environment.cpp index aea3afeaa..08564046e 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -312,12 +312,10 @@ void ActiveBlockList::update(std::list &active_positions, */ ServerEnvironment::ServerEnvironment(ServerMap *map, - GameScripting *scriptIface, - IGameDef *gamedef, IBackgroundBlockEmerger *emerger): + GameScripting *scriptIface, IGameDef *gamedef): m_map(map), m_script(scriptIface), m_gamedef(gamedef), - m_emerger(emerger), m_random_spawn_timer(3), m_send_recommended_timer(0), m_active_block_interval_overload_skip(0), @@ -1148,11 +1146,8 @@ void ServerEnvironment::step(float dtime) { v3s16 p = *i; - MapBlock *block = m_map->getBlockNoCreateNoEx(p); + MapBlock *block = m_map->getBlockOrEmerge(p); if(block==NULL){ - // Block needs to be fetched first - m_emerger->enqueueBlockEmerge( - PEER_ID_INEXISTENT, p, false); m_active_blocks.m_list.erase(p); continue; } diff --git a/src/environment.h b/src/environment.h index ffd4a1554..9e282476f 100644 --- a/src/environment.h +++ b/src/environment.h @@ -44,7 +44,6 @@ class ActiveBlockModifier; class ServerActiveObject; class ITextureSource; class IGameDef; -class IBackgroundBlockEmerger; class Map; class ServerMap; class ClientMap; @@ -194,8 +193,7 @@ class ServerEnvironment : public Environment { public: ServerEnvironment(ServerMap *map, GameScripting *scriptIface, - IGameDef *gamedef, - IBackgroundBlockEmerger *emerger); + IGameDef *gamedef); ~ServerEnvironment(); Map & getMap(); @@ -367,8 +365,6 @@ private: GameScripting* m_script; // Game definition IGameDef *m_gamedef; - // Background block emerger (the EmergeManager, in practice) - IBackgroundBlockEmerger *m_emerger; // Active object list std::map m_active_objects; // Outgoing network message buffer for active objects diff --git a/src/map.cpp b/src/map.cpp index 075649f94..22ea41e04 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -3126,7 +3126,9 @@ MapBlock * ServerMap::emergeBlock(v3s16 p, bool create_blank) return block; } - /*if(allow_generate) + +#if 0 + if(allow_generate) { std::map modified_blocks; MapBlock *block = generateBlock(p, modified_blocks); @@ -3149,11 +3151,21 @@ MapBlock * ServerMap::emergeBlock(v3s16 p, bool create_blank) return block; } - }*/ + } +#endif return NULL; } +MapBlock *ServerMap::getBlockOrEmerge(v3s16 p3d) +{ + MapBlock *block = getBlockNoCreateNoEx(p3d); + if (block == NULL) + m_emerge->enqueueBlockEmerge(PEER_ID_INEXISTENT, p3d, false); + + return block; +} + void ServerMap::prepareBlock(MapBlock *block) { ServerEnvironment *senv = &((Server *)m_gamedef)->getEnv(); diff --git a/src/map.h b/src/map.h index 54d8fe9ea..191cf5f94 100644 --- a/src/map.h +++ b/src/map.h @@ -424,6 +424,14 @@ public: */ MapBlock * emergeBlock(v3s16 p, bool create_blank=true); + /* + Try to get a block. + If it does not exist in memory, add it to the emerge queue. + - Memory + - Emerge Queue (deferred disk or generate) + */ + MapBlock *getBlockOrEmerge(v3s16 p3d); + // Carries out any initialization necessary before block is sent void prepareBlock(MapBlock *block); diff --git a/src/server.cpp b/src/server.cpp index 151bcada1..66f3cc1a7 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -343,7 +343,7 @@ Server::Server( // Initialize Environment ServerMap *servermap = new ServerMap(path_world, this, m_emerge); - m_env = new ServerEnvironment(servermap, m_script, this, m_emerge); + m_env = new ServerEnvironment(servermap, m_script, this); m_clients.setEnv(m_env);