summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/emerge.h10
-rw-r--r--src/environment.cpp9
-rw-r--r--src/environment.h6
-rw-r--r--src/map.cpp16
-rw-r--r--src/map.h8
-rw-r--r--src/server.cpp2
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<v3s16> &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<u16, ServerActiveObject*> 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<v3s16, MapBlock*> 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);