projects
/
oweals
/
minetest.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
c41f1c9
)
Attempt to fix objects getting multiplicated by objects getting deactivated in a...
author
Perttu Ahola
<celeron55@gmail.com>
Mon, 17 Oct 2011 17:19:37 +0000
(20:19 +0300)
committer
Perttu Ahola
<celeron55@gmail.com>
Mon, 17 Oct 2011 17:19:37 +0000
(20:19 +0300)
src/environment.cpp
patch
|
blob
|
history
diff --git
a/src/environment.cpp
b/src/environment.cpp
index 16bdcf9791e42c3cddc831e70076392a1b315196..1319e37444d40ec7480dff434634776638a27834 100644
(file)
--- a/
src/environment.cpp
+++ b/
src/environment.cpp
@@
-1399,7
+1399,7
@@
u16 ServerEnvironment::addActiveObjectRaw(ServerActiveObject *object,
object->m_static_block = blockpos;
if(set_changed)
object->m_static_block = blockpos;
if(set_changed)
- block->
setChangedFlag(
);
+ block->
raiseModified(MOD_STATE_WRITE_NEEDED
);
}
else{
errorstream<<"ServerEnvironment::addActiveObjectRaw(): "
}
else{
errorstream<<"ServerEnvironment::addActiveObjectRaw(): "
@@
-1444,11
+1444,12
@@
void ServerEnvironment::removeRemovedObjects()
*/
if(obj->m_static_exists && obj->m_removed)
{
*/
if(obj->m_static_exists && obj->m_removed)
{
- MapBlock *block = m_map->
getBlockNoCreateNoEx
(obj->m_static_block);
+ MapBlock *block = m_map->
emergeBlock
(obj->m_static_block);
if(block)
{
block->m_static_objects.remove(id);
if(block)
{
block->m_static_objects.remove(id);
- block->setChangedFlag();
+ block->raiseModified(MOD_STATE_WRITE_NEEDED);
+ obj->m_static_exists = false;
}
}
}
}
@@
-1556,7
+1557,6
@@
void ServerEnvironment::activateObjects(MapBlock *block)
<<" type="<<(int)s_obj.type<<std::endl;
// This will also add the object to the active static list
addActiveObjectRaw(obj, false);
<<" type="<<(int)s_obj.type<<std::endl;
// This will also add the object to the active static list
addActiveObjectRaw(obj, false);
- //u16 id = addActiveObjectRaw(obj, false);
}
// Clear stored list
block->m_static_objects.m_stored.clear();
}
// Clear stored list
block->m_static_objects.m_stored.clear();
@@
-1568,13
+1568,18
@@
void ServerEnvironment::activateObjects(MapBlock *block)
StaticObject &s_obj = *i;
block->m_static_objects.m_stored.push_back(s_obj);
}
StaticObject &s_obj = *i;
block->m_static_objects.m_stored.push_back(s_obj);
}
- // Block has been modified
- // NOTE: No it has not really. Save I/O here.
- //block->setChangedFlag();
+ /*
+ Note: Block hasn't really been modified here.
+ The objects have just been activated and moved from the stored
+ static list to the active static list.
+ As such, the block is essentially the same.
+ Thus, do not call block->setChangedFlag().
+ Otherwise there would be a huge amount of unnecessary I/O.
+ */
}
/*
}
/*
- Convert objects that are not
in
active blocks to static.
+ Convert objects that are not
standing inside
active blocks to static.
If m_known_by_count != 0, active object is not deleted, but static
data is still updated.
If m_known_by_count != 0, active object is not deleted, but static
data is still updated.
@@
-1594,7
+1599,7
@@
void ServerEnvironment::deactivateFarObjects(bool force_delete)
// This shouldn't happen but check it
if(obj == NULL)
{
// This shouldn't happen but check it
if(obj == NULL)
{
-
info
stream<<"NULL object found in ServerEnvironment"
+
error
stream<<"NULL object found in ServerEnvironment"
<<std::endl;
assert(0);
continue;
<<std::endl;
assert(0);
continue;
@@
-1619,17
+1624,15
@@
void ServerEnvironment::deactivateFarObjects(bool force_delete)
*/
// Delete old static object
*/
// Delete old static object
- MapBlock *oldblock = NULL;
if(obj->m_static_exists)
{
if(obj->m_static_exists)
{
- MapBlock *block = m_map->getBlockNoCreateNoEx
- (obj->m_static_block);
+ MapBlock *block = m_map->emergeBlock(obj->m_static_block, false);
if(block)
{
block->m_static_objects.remove(id);
if(block)
{
block->m_static_objects.remove(id);
- oldblock = block;
+ block->raiseModified(MOD_STATE_WRITE_AT_UNLOAD);
+ obj->m_static_exists = false;
}
}
- obj->m_static_exists = false;
}
// Create new static object
}
// Create new static object
@@
-1640,17
+1643,6
@@
void ServerEnvironment::deactivateFarObjects(bool force_delete)
// Get or generate the block
MapBlock *block = m_map->emergeBlock(blockpos);
// Get or generate the block
MapBlock *block = m_map->emergeBlock(blockpos);
- /*MapBlock *block = m_map->getBlockNoCreateNoEx(blockpos);
- if(block == NULL)
- {
- // Block not found. Is the old block still ok?
- if(oldblock)
- block = oldblock;
- // Load from disk or generate
- else
- block = m_map->emergeBlock(blockpos);
- }*/
-
if(block)
{
if(block->m_static_objects.m_stored.size() >= 50){
if(block)
{
if(block->m_static_objects.m_stored.size() >= 50){
@@
-1661,7
+1653,7
@@
void ServerEnvironment::deactivateFarObjects(bool force_delete)
force_delete = true;
} else {
block->m_static_objects.insert(0, s_obj);
force_delete = true;
} else {
block->m_static_objects.insert(0, s_obj);
- block->
setChangedFlag(
);
+ block->
raiseModified(MOD_STATE_WRITE_AT_UNLOAD
);
obj->m_static_exists = true;
obj->m_static_block = block->getPos();
}
obj->m_static_exists = true;
obj->m_static_block = block->getPos();
}