aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoic Blot <loic.blot@unix-experience.fr>2015-03-04 16:58:04 +0100
committerLoic Blot <loic.blot@unix-experience.fr>2015-03-04 17:02:36 +0100
commit06f328207fa0a3e606992d3569b061b335eb0f48 (patch)
tree324ce16ead2a4080882bd23077d93e446811add5
parent2066655aae2022384fc12a10c04dccfd2996f0ac (diff)
downloadminetest-06f328207fa0a3e606992d3569b061b335eb0f48.tar.gz
minetest-06f328207fa0a3e606992d3569b061b335eb0f48.tar.bz2
minetest-06f328207fa0a3e606992d3569b061b335eb0f48.zip
ABMHandler and player_collisions use sequential read/write. Switch from std::list to std::vector
* Also remove dead code Map::unloadUnusedData which is dead since a long time
-rw-r--r--src/environment.cpp18
-rw-r--r--src/environment.h2
-rw-r--r--src/localplayer.cpp7
-rw-r--r--src/localplayer.h2
-rw-r--r--src/map.cpp66
-rw-r--r--src/map.h12
6 files changed, 18 insertions, 89 deletions
diff --git a/src/environment.cpp b/src/environment.cpp
index 217d50fd5..0a3d36019 100644
--- a/src/environment.cpp
+++ b/src/environment.cpp
@@ -382,7 +382,7 @@ ServerEnvironment::~ServerEnvironment()
m_map->drop();
// Delete ActiveBlockModifiers
- for(std::list<ABMWithState>::iterator
+ for(std::vector<ABMWithState>::iterator
i = m_abms.begin(); i != m_abms.end(); ++i){
delete i->abm;
}
@@ -560,7 +560,7 @@ private:
ServerEnvironment *m_env;
std::map<content_t, std::vector<ActiveABM> > m_aabms;
public:
- ABMHandler(std::list<ABMWithState> &abms,
+ ABMHandler(std::vector<ABMWithState> &abms,
float dtime_s, ServerEnvironment *env,
bool use_timers):
m_env(env)
@@ -568,8 +568,8 @@ public:
if(dtime_s < 0.001)
return;
INodeDefManager *ndef = env->getGameDef()->ndef();
- for(std::list<ABMWithState>::iterator
- i = abms.begin(); i != abms.end(); ++i){
+ for(std::vector<ABMWithState>::iterator
+ i = abms.begin(); i != abms.end(); ++i) {
ActiveBlockModifier *abm = i->abm;
float trigger_interval = abm->getTriggerInterval();
if(trigger_interval < 0.001)
@@ -1182,7 +1182,7 @@ void ServerEnvironment::step(float dtime)
<<") being handled"<<std::endl;*/
MapBlock *block = m_map->getBlockNoCreateNoEx(p);
- if(block==NULL)
+ if(block == NULL)
continue;
// Set current time as timestamp
@@ -2081,7 +2081,7 @@ void ClientEnvironment::step(float dtime)
LocalPlayer *lplayer = getLocalPlayer();
assert(lplayer);
// collision info queue
- std::list<CollisionInfo> player_collisions;
+ std::vector<CollisionInfo> player_collisions;
/*
Get the speed the player is going
@@ -2196,10 +2196,8 @@ void ClientEnvironment::step(float dtime)
//std::cout<<"Looped "<<loopcount<<" times."<<std::endl;
- for(std::list<CollisionInfo>::iterator
- i = player_collisions.begin();
- i != player_collisions.end(); ++i)
- {
+ for(std::vector<CollisionInfo>::iterator i = player_collisions.begin();
+ i != player_collisions.end(); ++i) {
CollisionInfo &info = *i;
v3f speed_diff = info.new_speed - info.old_speed;;
// Handle only fall damage
diff --git a/src/environment.h b/src/environment.h
index 761e9068b..386289307 100644
--- a/src/environment.h
+++ b/src/environment.h
@@ -393,7 +393,7 @@ private:
u32 m_game_time;
// A helper variable for incrementing the latter
float m_game_time_fraction_counter;
- std::list<ABMWithState> m_abms;
+ std::vector<ABMWithState> m_abms;
// An interval for generally sending object positions and stuff
float m_recommended_send_interval;
// Estimate for general maximum lag as determined by server.
diff --git a/src/localplayer.cpp b/src/localplayer.cpp
index 69d4ec7ef..cb183947a 100644
--- a/src/localplayer.cpp
+++ b/src/localplayer.cpp
@@ -67,7 +67,7 @@ LocalPlayer::~LocalPlayer()
}
void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
- std::list<CollisionInfo> *collision_info)
+ std::vector<CollisionInfo> *collision_info)
{
Map *map = &env->getMap();
INodeDefManager *nodemgr = m_gamedef->ndef();
@@ -323,9 +323,8 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
*/
bool bouncy_jump = false;
// Dont report if flying
- if(collision_info && !(g_settings->getBool("free_move") && fly_allowed))
- {
- for(size_t i=0; i<result.collisions.size(); i++){
+ if(collision_info && !(g_settings->getBool("free_move") && fly_allowed)) {
+ for(size_t i=0; i<result.collisions.size(); i++) {
const CollisionInfo &info = result.collisions[i];
collision_info->push_back(info);
if(info.new_speed.Y - info.old_speed.Y > 0.1*BS &&
diff --git a/src/localplayer.h b/src/localplayer.h
index 16b66716d..2a4a9dfc7 100644
--- a/src/localplayer.h
+++ b/src/localplayer.h
@@ -48,7 +48,7 @@ public:
void move(f32 dtime, Environment *env, f32 pos_max_d);
void move(f32 dtime, Environment *env, f32 pos_max_d,
- std::list<CollisionInfo> *collision_info);
+ std::vector<CollisionInfo> *collision_info);
void applyControl(float dtime);
diff --git a/src/map.cpp b/src/map.cpp
index a9ff22c32..2c7028009 100644
--- a/src/map.cpp
+++ b/src/map.cpp
@@ -1428,7 +1428,7 @@ void Map::timerUpdate(float dtime, float unload_timeout,
// Profile modified reasons
Profiler modprofiler;
- std::list<v2s16> sector_deletion_queue;
+ std::vector<v2s16> sector_deletion_queue;
u32 deleted_blocks_count = 0;
u32 saved_blocks_count = 0;
u32 block_count_all = 0;
@@ -1505,11 +1505,10 @@ void Map::unloadUnreferencedBlocks(std::vector<v3s16> *unloaded_blocks)
timerUpdate(0.0, -1.0, unloaded_blocks);
}
-void Map::deleteSectors(std::list<v2s16> &list)
+void Map::deleteSectors(std::vector<v2s16> &sectorList)
{
- for(std::list<v2s16>::iterator j = list.begin();
- j != list.end(); ++j)
- {
+ for(std::vector<v2s16>::iterator j = sectorList.begin();
+ j != sectorList.end(); ++j) {
MapSector *sector = m_sectors[*j];
// If sector is in sector cache, remove it from there
if(m_sector_cache == sector)
@@ -1520,63 +1519,6 @@ void Map::deleteSectors(std::list<v2s16> &list)
}
}
-#if 0
-void Map::unloadUnusedData(float timeout,
- core::list<v3s16> *deleted_blocks)
-{
- core::list<v2s16> sector_deletion_queue;
- u32 deleted_blocks_count = 0;
- u32 saved_blocks_count = 0;
-
- core::map<v2s16, MapSector*>::Iterator si = m_sectors.getIterator();
- for(; si.atEnd() == false; si++)
- {
- MapSector *sector = si.getNode()->getValue();
-
- bool all_blocks_deleted = true;
-
- core::list<MapBlock*> blocks;
- sector->getBlocks(blocks);
- for(core::list<MapBlock*>::Iterator i = blocks.begin();
- i != blocks.end(); i++)
- {
- MapBlock *block = (*i);
-
- if(block->getUsageTimer() > timeout)
- {
- // Save if modified
- if(block->getModified() != MOD_STATE_CLEAN)
- {
- saveBlock(block);
- saved_blocks_count++;
- }
- // Delete from memory
- sector->deleteBlock(block);
- deleted_blocks_count++;
- }
- else
- {
- all_blocks_deleted = false;
- }
- }
-
- if(all_blocks_deleted)
- {
- sector_deletion_queue.push_back(si.getNode()->getKey());
- }
- }
-
- deleteSectors(sector_deletion_queue);
-
- infostream<<"Map: Unloaded "<<deleted_blocks_count<<" blocks from memory"
- <<", of which "<<saved_blocks_count<<" were wr."
- <<std::endl;
-
- //return sector_deletion_queue.getSize();
- //return deleted_blocks_count;
-}
-#endif
-
void Map::PrintInfo(std::ostream &out)
{
out<<"Map: ";
diff --git a/src/map.h b/src/map.h
index f4ea54f30..ab5f45ab9 100644
--- a/src/map.h
+++ b/src/map.h
@@ -288,17 +288,7 @@ public:
// Deletes sectors and their blocks from memory
// Takes cache into account
// If deleted sector is in sector cache, clears cache
- void deleteSectors(std::list<v2s16> &list);
-
-#if 0
- /*
- Unload unused data
- = flush changed to disk and delete from memory, if usage timer of
- block is more than timeout
- */
- void unloadUnusedData(float timeout,
- core::list<v3s16> *deleted_blocks=NULL);
-#endif
+ void deleteSectors(std::vector<v2s16> &list);
// For debug printing. Prints "Map: ", "ServerMap: " or "ClientMap: "
virtual void PrintInfo(std::ostream &out);