diff options
author | maximius <none@none> | 2009-10-30 22:52:37 -0700 |
---|---|---|
committer | maximius <none@none> | 2009-10-30 22:52:37 -0700 |
commit | 73fd6dbba634535feb4539f8ad768b1db27a17b3 (patch) | |
tree | 3bb972490c8ef9dd1e8cf67aafa0a884933147f8 /src/game/MapManager.cpp | |
parent | 22f349d2b50d8606aebc5468a8186c1287901585 (diff) |
*Make mtmaps a bit more stable, particularly when it updates players.
*Do some better cleanup on spec switching (should no longer strip away all auras, forcing a relog), unsummon totems, clear combo points, etc.
*Cleanup and optimization.
--HG--
branch : trunk
Diffstat (limited to 'src/game/MapManager.cpp')
-rw-r--r-- | src/game/MapManager.cpp | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/src/game/MapManager.cpp b/src/game/MapManager.cpp index 7947c8d0089..68953556aa0 100644 --- a/src/game/MapManager.cpp +++ b/src/game/MapManager.cpp @@ -295,22 +295,22 @@ void MapManager::Update(uint32 diff) { i_timer.Update(diff); - if( !i_timer.Passed() ) + if (!i_timer.Passed()) return; + MapMapType::iterator iter = i_maps.begin(); #ifdef MULTI_THREAD_MAP - uint32 i=0; - MapMapType::iterator iter; + uint32 i; std::vector<Map*> update_queue(i_maps.size()); int omp_set_num_threads(sWorld.getConfig(CONFIG_NUMTHREADS)); - for (iter = i_maps.begin(), i=0; iter != i_maps.end(); ++iter, i++) - update_queue[i]=iter->second; + for (i = 0; iter != i_maps.end(); ++iter, ++i) + update_queue[i] = iter->second; /* gomp in gcc <4.4 version cannot parallelise loops using random access iterators so until gcc 4.4 isnt standard, we need the update_queue workaround */ #pragma omp parallel for schedule(dynamic) private(i) shared(update_queue) - for (int32 i = 0; i < i_maps.size(); ++i) + for (; i > 0; --i) { checkAndCorrectGridStatesArray(); // debugging code, should be deleted some day update_queue[i]->Update(i_timer.GetCurrent()); @@ -318,7 +318,7 @@ MapManager::Update(uint32 diff) // sLog.outError("This is thread %d out of %d threads,updating map %u",omp_get_thread_num(),omp_get_num_threads(),iter->second->GetId()); } #else - for (MapMapType::iterator iter=i_maps.begin(); iter != i_maps.end(); ++iter) + for (MapMapType::iterator iter = i_maps.begin(); iter != i_maps.end(); ++iter) { iter->second->Update(i_timer.GetCurrent()); sWorld.RecordTimeDiff("UpdateMap %u", iter->second->GetId()); @@ -340,17 +340,15 @@ MapManager::Update(uint32 diff) void MapManager::DoDelayedMovesAndRemoves() { /* - int i =0; std::vector<Map*> update_queue(i_maps.size()); - MapMapType::iterator iter; - for (iter = i_maps.begin(); iter != i_maps.end(); ++iter, i++) + for (MapMapType::iterator iter = i_maps.begin(), uint32 i = 0; iter != i_maps.end(); ++iter, ++i) update_queue[i] = iter->second; omp_set_num_threads(sWorld.getConfig(CONFIG_NUMTHREADS)); #pragma omp parallel for schedule(dynamic) private(i) shared(update_queue) - for (i=0; i<i_maps.size(); i++) - update_queue[i]->DoDelayedMovesAndRemoves(); + for (uint32 i = 0; i < i_maps.size(); ++i) + update_queue[i]->DoDelayedMovesAndRemoves(); */ } |