mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-02-15 16:26:08 +00:00
feat(Core/Misc): implement ObjectGuid class (port from TC) (#4885)
This commit is contained in:
@@ -12,6 +12,8 @@
|
||||
#include "Map.h"
|
||||
#include "MapUpdater.h"
|
||||
#include "Object.h"
|
||||
#include "MapInstanced.h"
|
||||
|
||||
#include <mutex>
|
||||
|
||||
class Transport;
|
||||
@@ -120,6 +122,12 @@ public:
|
||||
|
||||
MapUpdater* GetMapUpdater() { return &m_updater; }
|
||||
|
||||
template<typename Worker>
|
||||
void DoForAllMaps(Worker&& worker);
|
||||
|
||||
template<typename Worker>
|
||||
void DoForAllMapsWithMapId(uint32 mapId, Worker&& worker);
|
||||
|
||||
private:
|
||||
typedef std::unordered_map<uint32, Map*> MapMapType;
|
||||
typedef std::vector<bool> InstanceIds;
|
||||
@@ -140,6 +148,45 @@ private:
|
||||
MapUpdater m_updater;
|
||||
};
|
||||
|
||||
template<typename Worker>
|
||||
void MapManager::DoForAllMaps(Worker&& worker)
|
||||
{
|
||||
std::lock_guard<std::mutex> guard(Lock);
|
||||
|
||||
for (auto& mapPair : i_maps)
|
||||
{
|
||||
Map* map = mapPair.second;
|
||||
if (MapInstanced* mapInstanced = map->ToMapInstanced())
|
||||
{
|
||||
MapInstanced::InstancedMaps& instances = mapInstanced->GetInstancedMaps();
|
||||
for (auto& instancePair : instances)
|
||||
worker(instancePair.second);
|
||||
}
|
||||
else
|
||||
worker(map);
|
||||
}
|
||||
}
|
||||
|
||||
template<typename Worker>
|
||||
inline void MapManager::DoForAllMapsWithMapId(uint32 mapId, Worker&& worker)
|
||||
{
|
||||
std::lock_guard<std::mutex> guard(Lock);
|
||||
|
||||
auto itr = i_maps.find(mapId);
|
||||
if (itr != i_maps.end())
|
||||
{
|
||||
Map* map = itr->second;
|
||||
if (MapInstanced* mapInstanced = map->ToMapInstanced())
|
||||
{
|
||||
MapInstanced::InstancedMaps& instances = mapInstanced->GetInstancedMaps();
|
||||
for (auto& p : instances)
|
||||
worker(p.second);
|
||||
}
|
||||
else
|
||||
worker(map);
|
||||
}
|
||||
}
|
||||
|
||||
#define sMapMgr MapManager::instance()
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user