--HG--
branch : trunk
This commit is contained in:
megamage
2009-03-11 12:03:43 -06:00
4 changed files with 19 additions and 11 deletions

View File

@@ -42,7 +42,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

View File

@@ -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,15 +46,25 @@ 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
template<> inline void Visit(PlayerMapType &);
template<> inline void Visit(CreatureMapType &);
#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
void Notify(void);
};
struct TRINITY_DLL_DECL CreatureRelocationNotifier

View File

@@ -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)
{

View File

@@ -733,11 +733,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();
}
@@ -747,7 +745,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();
}