diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/GridNotifiers.cpp | 2 | ||||
-rw-r--r-- | src/game/GridNotifiers.h | 18 | ||||
-rw-r--r-- | src/game/GridNotifiersImpl.h | 2 | ||||
-rw-r--r-- | src/game/Map.cpp | 8 |
4 files changed, 19 insertions, 11 deletions
diff --git a/src/game/GridNotifiers.cpp b/src/game/GridNotifiers.cpp index 13fa66308e5..fcb4e376b26 100644 --- a/src/game/GridNotifiers.cpp +++ b/src/game/GridNotifiers.cpp @@ -43,7 +43,7 @@ VisibleChangesNotifier::Visit(PlayerMapType &m) } void -PlayerRelocationNotifier::Notify() +PlayerVisibilityNotifier::Notify() { // at this moment i_clientGUIDs have guids that not iterate at grid level checks // but exist one case when this possible and object not out of range: transports diff --git a/src/game/GridNotifiers.h b/src/game/GridNotifiers.h index bdd40a3f72f..8e427366f1a 100644 --- a/src/game/GridNotifiers.h +++ b/src/game/GridNotifiers.h @@ -38,7 +38,7 @@ class Player; namespace Trinity { - struct TRINITY_DLL_DECL PlayerRelocationNotifier + struct TRINITY_DLL_DECL PlayerVisibilityNotifier { Player &i_player; UpdateData i_data; @@ -46,17 +46,27 @@ namespace Trinity Player::ClientGUIDs i_clientGUIDs; std::set<WorldObject*> i_visibleNow; - PlayerRelocationNotifier(Player &player) : i_player(player),i_clientGUIDs(player.m_clientGUIDs) {} + PlayerVisibilityNotifier(Player &player) : i_player(player),i_clientGUIDs(player.m_clientGUIDs) {} template<class T> inline void Visit(GridRefManager<T> &); - #ifdef WIN32 + /*#ifdef WIN32 template<> inline void Visit(PlayerMapType &); template<> inline void Visit(CreatureMapType &); - #endif + #endif*/ void Notify(void); }; + struct TRINITY_DLL_DECL PlayerRelocationNotifier : public PlayerVisibilityNotifier + { + PlayerRelocationNotifier(Player &player) : PlayerVisibilityNotifier(player) {} + template<class T> inline void Visit(GridRefManager<T> &m) { PlayerVisibilityNotifier::Visit(m); } + #ifdef WIN32 + template<> inline void Visit(PlayerMapType &); + template<> inline void Visit(CreatureMapType &); + #endif + }; + struct TRINITY_DLL_DECL CreatureRelocationNotifier { Creature &i_creature; diff --git a/src/game/GridNotifiersImpl.h b/src/game/GridNotifiersImpl.h index 7131b6281f4..4fe61076b18 100644 --- a/src/game/GridNotifiersImpl.h +++ b/src/game/GridNotifiersImpl.h @@ -67,7 +67,7 @@ inline void CreatureCreatureRelocationWorker(Creature* c1, Creature* c2) template<class T> inline void -Trinity::PlayerRelocationNotifier::Visit(GridRefManager<T> &m) +Trinity::PlayerVisibilityNotifier::Visit(GridRefManager<T> &m) { for(typename GridRefManager<T>::iterator iter = m.begin(); iter != m.end(); ++iter) { diff --git a/src/game/Map.cpp b/src/game/Map.cpp index 9c2521ca3bd..fbe87986903 100644 --- a/src/game/Map.cpp +++ b/src/game/Map.cpp @@ -754,11 +754,9 @@ void Map::Update(const uint32 &t_diff) if(obj->isType(TYPEMASK_UNIT)) { if(!((Unit*)obj)->GetSharedVisionList().empty()) - for(SharedVisionList::const_iterator itr = ((Unit*)obj)->GetSharedVisionList().begin(); itr != ((Unit*)obj)->GetSharedVisionList().end();) + for(SharedVisionList::const_iterator itr = ((Unit*)obj)->GetSharedVisionList().begin(); itr != ((Unit*)obj)->GetSharedVisionList().end(); ++itr) { - Player *player = *itr; - ++itr; - Trinity::PlayerRelocationNotifier notifier(*player); + Trinity::PlayerVisibilityNotifier notifier(**itr); VisitAll(obj->GetPositionX(), obj->GetPositionY(), World::GetMaxVisibleDistance(), notifier); notifier.Notify(); } @@ -768,7 +766,7 @@ void Map::Update(const uint32 &t_diff) if(Unit *caster = ((DynamicObject*)obj)->GetCaster()) if(caster->GetTypeId() == TYPEID_PLAYER && caster->GetUInt64Value(PLAYER_FARSIGHT) == obj->GetGUID()) { - Trinity::PlayerRelocationNotifier notifier(*((Player*)caster)); + Trinity::PlayerVisibilityNotifier notifier(*((Player*)caster)); VisitAll(obj->GetPositionX(), obj->GetPositionY(), World::GetMaxVisibleDistance(), notifier); notifier.Notify(); } |