aboutsummaryrefslogtreecommitdiff
path: root/src/mapsector.cpp
diff options
context:
space:
mode:
authorest31 <MTest31@outlook.com>2015-08-10 22:24:47 +0200
committerest31 <MTest31@outlook.com>2015-08-13 07:56:07 +0200
commita8e238ed06ee8285ed4459e9deda3117419837f6 (patch)
tree9d2d9caee1f9d1a3944d1ba078e7df6e9f13d7c3 /src/mapsector.cpp
parent2b04ab874d75711bc021a0cd8dc7fca68f4e6929 (diff)
downloadminetest-a8e238ed06ee8285ed4459e9deda3117419837f6.tar.gz
minetest-a8e238ed06ee8285ed4459e9deda3117419837f6.tar.bz2
minetest-a8e238ed06ee8285ed4459e9deda3117419837f6.zip
Add count based unload limit for mapblocks
Diffstat (limited to 'src/mapsector.cpp')
-rw-r--r--src/mapsector.cpp35
1 files changed, 20 insertions, 15 deletions
diff --git a/src/mapsector.cpp b/src/mapsector.cpp
index 3fe81dc90..9ce3c8eb3 100644
--- a/src/mapsector.cpp
+++ b/src/mapsector.cpp
@@ -59,7 +59,7 @@ MapBlock * MapSector::getBlockBuffered(s16 y)
if(m_block_cache != NULL && y == m_block_cache_y){
return m_block_cache;
}
-
+
// If block doesn't exist, return NULL
std::map<s16, MapBlock*>::iterator n = m_blocks.find(y);
if(n == m_blocks.end())
@@ -70,11 +70,11 @@ MapBlock * MapSector::getBlockBuffered(s16 y)
else{
block = n->second;
}
-
+
// Cache the last result
m_block_cache_y = y;
m_block_cache = block;
-
+
return block;
}
@@ -88,16 +88,16 @@ MapBlock * MapSector::createBlankBlockNoInsert(s16 y)
assert(getBlockBuffered(y) == NULL); // Pre-condition
v3s16 blockpos_map(m_pos.X, y, m_pos.Y);
-
+
MapBlock *block = new MapBlock(m_parent, blockpos_map, m_gamedef);
-
+
return block;
}
MapBlock * MapSector::createBlankBlock(s16 y)
{
MapBlock *block = createBlankBlockNoInsert(y);
-
+
m_blocks[y] = block;
return block;
@@ -114,7 +114,7 @@ void MapSector::insertBlock(MapBlock *block)
v2s16 p2d(block->getPos().X, block->getPos().Z);
assert(p2d == m_pos);
-
+
// Insert into container
m_blocks[block_y] = block;
}
@@ -125,7 +125,7 @@ void MapSector::deleteBlock(MapBlock *block)
// Clear from cache
m_block_cache = NULL;
-
+
// Remove from container
m_blocks.erase(block_y);
@@ -142,6 +142,11 @@ void MapSector::getBlocks(MapBlockVect &dest)
}
}
+bool MapSector::empty()
+{
+ return m_blocks.empty();
+}
+
/*
ServerMapSector
*/
@@ -159,18 +164,18 @@ void ServerMapSector::serialize(std::ostream &os, u8 version)
{
if(!ser_ver_supported(version))
throw VersionMismatchException("ERROR: MapSector format not supported");
-
+
/*
[0] u8 serialization version
+ heightmap data
*/
-
+
// Server has both of these, no need to support not having them.
//assert(m_objects != NULL);
// Write version
os.write((char*)&version, 1);
-
+
/*
Add stuff here, if needed
*/
@@ -193,18 +198,18 @@ ServerMapSector* ServerMapSector::deSerialize(
/*
Read stuff
*/
-
+
// Read version
u8 version = SER_FMT_VER_INVALID;
is.read((char*)&version, 1);
-
+
if(!ser_ver_supported(version))
throw VersionMismatchException("ERROR: MapSector format not supported");
-
+
/*
Add necessary reading stuff here
*/
-
+
/*
Get or create sector
*/