AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
ObjectVisibilityContainer Class Reference

#include "ObjectVisibilityContainer.h"

Public Member Functions

 ObjectVisibilityContainer (WorldObject *selfObject)
 
 ~ObjectVisibilityContainer ()
 
void InitForPlayer ()
 
void CleanVisibilityReferences ()
 
void LinkWorldObjectVisibility (WorldObject *worldObject)
 
void UnlinkWorldObjectVisibility (WorldObject *worldObject)
 
VisibleWorldObjectsMap::iterator UnlinkVisibilityFromPlayer (WorldObject *worldObject, VisibleWorldObjectsMap::iterator itr)
 
VisiblePlayersMap::iterator UnlinkVisibilityFromWorldObject (Player *player, VisiblePlayersMap::iterator itr)
 
VisiblePlayersMapGetVisiblePlayersMap ()
 
VisiblePlayersMap const & GetVisiblePlayersMap () const
 
VisibleWorldObjectsMapGetVisibleWorldObjectsMap ()
 
VisibleWorldObjectsMap const * GetVisibleWorldObjectsMap () const
 

Private Member Functions

void DirectRemoveVisibilityReference (ObjectGuid guid)
 
void DirectInsertVisiblePlayerReference (Player *player)
 
void DirectRemoveVisiblePlayerReference (ObjectGuid guid)
 

Private Attributes

WorldObject_selfObject
 
std::unique_ptr< VisibleWorldObjectsMap_visibleWorldObjectsMap
 
VisiblePlayersMap _visiblePlayersMap
 

Detailed Description

Constructor & Destructor Documentation

◆ ObjectVisibilityContainer()

ObjectVisibilityContainer::ObjectVisibilityContainer ( WorldObject selfObject)
30 :
31 _selfObject(selfObject)
32{
33}
WorldObject * _selfObject
Definition ObjectVisibilityContainer.h:90

◆ ~ObjectVisibilityContainer()

ObjectVisibilityContainer::~ObjectVisibilityContainer ( )
36{
39 ASSERT((*_visibleWorldObjectsMap).empty());
40}
#define ASSERT
Definition Errors.h:68
std::unique_ptr< VisibleWorldObjectsMap > _visibleWorldObjectsMap
Definition ObjectVisibilityContainer.h:94
VisiblePlayersMap _visiblePlayersMap
Definition ObjectVisibilityContainer.h:98

References _visiblePlayersMap, _visibleWorldObjectsMap, and ASSERT.

Member Function Documentation

◆ CleanVisibilityReferences()

void ObjectVisibilityContainer::CleanVisibilityReferences ( )
48{
49 for (auto const& kvPair : _visiblePlayersMap)
50 kvPair.second->GetObjectVisibilityContainer().DirectRemoveVisibilityReference(_selfObject->GetGUID());
51
53 {
54 for (auto const& kvPair : *_visibleWorldObjectsMap)
55 kvPair.second->GetObjectVisibilityContainer().DirectRemoveVisiblePlayerReference(_selfObject->GetGUID());
56
57 (*_visibleWorldObjectsMap).clear();
58 }
59
60 _visiblePlayersMap.clear();
61}
void DirectRemoveVisiblePlayerReference(ObjectGuid guid)
Definition ObjectVisibilityContainer.cpp:115
void DirectRemoveVisibilityReference(ObjectGuid guid)
Definition ObjectVisibilityContainer.cpp:104

References _selfObject, _visiblePlayersMap, _visibleWorldObjectsMap, and Object::GetGUID().

Referenced by WorldSession::HandlePlayerLoginToCharInWorld(), and WorldObject::RemoveFromWorld().

◆ DirectInsertVisiblePlayerReference()

void ObjectVisibilityContainer::DirectInsertVisiblePlayerReference ( Player player)
private
111{
112 _visiblePlayersMap.insert(std::make_pair(player->GetGUID(), player));
113}
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:113

References _visiblePlayersMap, and Object::GetGUID().

Referenced by LinkWorldObjectVisibility().

◆ DirectRemoveVisibilityReference()

void ObjectVisibilityContainer::DirectRemoveVisibilityReference ( ObjectGuid  guid)
private
105{
107 (*_visibleWorldObjectsMap).erase(guid);
108}

References _visibleWorldObjectsMap, and ASSERT.

Referenced by UnlinkVisibilityFromWorldObject().

◆ DirectRemoveVisiblePlayerReference()

void ObjectVisibilityContainer::DirectRemoveVisiblePlayerReference ( ObjectGuid  guid)
private
116{
117 _visiblePlayersMap.erase(guid);
118}

References _visiblePlayersMap.

Referenced by UnlinkVisibilityFromPlayer(), and UnlinkWorldObjectVisibility().

◆ GetVisiblePlayersMap() [1/2]

◆ GetVisiblePlayersMap() [2/2]

VisiblePlayersMap const & ObjectVisibilityContainer::GetVisiblePlayersMap ( ) const
inline
55{ return _visiblePlayersMap; }

References _visiblePlayersMap.

◆ GetVisibleWorldObjectsMap() [1/2]

VisibleWorldObjectsMap * ObjectVisibilityContainer::GetVisibleWorldObjectsMap ( )
inline

◆ GetVisibleWorldObjectsMap() [2/2]

VisibleWorldObjectsMap const * ObjectVisibilityContainer::GetVisibleWorldObjectsMap ( ) const
inline
68 {
70 return nullptr;
71
72 return _visibleWorldObjectsMap.get();
73 }

References _visibleWorldObjectsMap.

◆ InitForPlayer()

void ObjectVisibilityContainer::InitForPlayer ( )
43{
44 _visibleWorldObjectsMap = std::make_unique<VisibleWorldObjectsMap>();
45}

References _visibleWorldObjectsMap.

Referenced by Player::Player().

◆ LinkWorldObjectVisibility()

void ObjectVisibilityContainer::LinkWorldObjectVisibility ( WorldObject worldObject)
64{
65 // Do not link self
66 if (worldObject == _selfObject)
67 return;
68
69 // Transports are special and should not be added to our visibility map
70 if (worldObject->IsGameObject() && worldObject->ToGameObject()->IsTransport())
71 return;
72
73 // Only players can link visibility
75 return;
76
77 (*_visibleWorldObjectsMap).insert(std::make_pair(worldObject->GetGUID(), worldObject));
79}
bool IsTransport() const
Definition GameObject.cpp:1207
void DirectInsertVisiblePlayerReference(Player *player)
Definition ObjectVisibilityContainer.cpp:110
Player * ToPlayer()
Definition Object.h:202
bool IsGameObject() const
Definition Object.h:213
GameObject * ToGameObject()
Definition Object.h:214
ObjectVisibilityContainer & GetObjectVisibilityContainer()
Definition Object.h:726

References _selfObject, _visibleWorldObjectsMap, DirectInsertVisiblePlayerReference(), Object::GetGUID(), WorldObject::GetObjectVisibilityContainer(), Object::IsGameObject(), GameObject::IsTransport(), Object::ToGameObject(), and Object::ToPlayer().

Referenced by Player::UpdateVisibilityOf(), UpdateVisibilityOf_helper(), UpdateVisibilityOf_helper(), UpdateVisibilityOf_helper(), and UpdateVisibilityOf_helper().

◆ UnlinkVisibilityFromPlayer()

VisibleWorldObjectsMap::iterator ObjectVisibilityContainer::UnlinkVisibilityFromPlayer ( WorldObject worldObject,
VisibleWorldObjectsMap::iterator  itr 
)
92{
93 ASSERT(_visibleWorldObjectsMap); // Ensure we aren't for some reason calling this as a non-player object
95 return (*_visibleWorldObjectsMap).erase(itr);
96}

References _selfObject, _visibleWorldObjectsMap, ASSERT, DirectRemoveVisiblePlayerReference(), Object::GetGUID(), and WorldObject::GetObjectVisibilityContainer().

Referenced by Acore::VisibleNotifier::SendToSelf().

◆ UnlinkVisibilityFromWorldObject()

VisiblePlayersMap::iterator ObjectVisibilityContainer::UnlinkVisibilityFromWorldObject ( Player player,
VisiblePlayersMap::iterator  itr 
)

◆ UnlinkWorldObjectVisibility()

void ObjectVisibilityContainer::UnlinkWorldObjectVisibility ( WorldObject worldObject)
82{
83 // Only players can unlink visibility
85 return;
86
88 (*_visibleWorldObjectsMap).erase(worldObject->GetGUID());
89}

References _selfObject, _visibleWorldObjectsMap, DirectRemoveVisiblePlayerReference(), Object::GetGUID(), and WorldObject::GetObjectVisibilityContainer().

Referenced by Player::UpdateVisibilityOf(), and Player::UpdateVisibilityOf().

Member Data Documentation

◆ _selfObject

◆ _visiblePlayersMap

◆ _visibleWorldObjectsMap


The documentation for this class was generated from the following files: