本文整理汇总了C++中Object::AddInRangeObject方法的典型用法代码示例。如果您正苦于以下问题:C++ Object::AddInRangeObject方法的具体用法?C++ Object::AddInRangeObject怎么用?C++ Object::AddInRangeObject使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Object
的用法示例。
在下文中一共展示了Object::AddInRangeObject方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: UpdateInRangeSet
void MapMgr::UpdateInRangeSet( Object *obj, Player *plObj, MapCell* cell, ByteBuffer ** buf )
{
#define CHECK_BUF if(!*buf) *buf = new ByteBuffer(2500)
if( cell == NULL )
return;
Object* curObj;
Player* plObj2;
int count;
ObjectSet::iterator iter = cell->Begin();
ObjectSet::iterator itr;
float fRange;
bool cansee, isvisible;
while( iter != cell->End() )
{
curObj = *iter;
++iter;
if( curObj == NULL )
continue;
if( curObj->IsPlayer() && obj->IsPlayer() && plObj->m_TransporterGUID && plObj->m_TransporterGUID == static_cast< Player* >( curObj )->m_TransporterGUID )
fRange = 0.0f; // unlimited distance for people on same boat
else if( curObj->GetTypeFromGUID() == HIGHGUID_TYPE_TRANSPORTER )
fRange = 0.0f; // unlimited distance for transporters (only up to 2 cells +/- anyway.)
else
fRange = m_UpdateDistance; // normal distance
if ( curObj != obj && ( curObj->GetDistance2dSq( obj ) <= fRange || fRange == 0.0f ) )
{
if( !obj->IsInRangeSet( curObj ) )
{
// Object in range, add to set
obj->AddInRangeObject( curObj );
curObj->AddInRangeObject( obj );
if( curObj->IsPlayer() )
{
plObj2 = static_cast< Player* >( curObj );
if( plObj2 != NULL && plObj2->CanSee( obj ) && !plObj2->IsVisible( obj ) )
{
CHECK_BUF;
count = obj->BuildCreateUpdateBlockForPlayer(*buf, plObj2);
plObj2->PushCreationData(*buf, count);
plObj2->AddVisibleObject(obj);
(*buf)->clear();
}
}
if( plObj != NULL )
{
if( plObj->CanSee( curObj ) && !plObj->IsVisible( curObj ) )
{
CHECK_BUF;
count = curObj->BuildCreateUpdateBlockForPlayer( *buf, plObj );
plObj->PushCreationData( *buf, count );
plObj->AddVisibleObject( curObj );
(*buf)->clear();
}
}
}
else
{
// Check visiblility
if( curObj->IsPlayer() )
{
plObj2 = static_cast< Player* >( curObj );
cansee = plObj2->CanSee(obj);
isvisible = plObj2->GetVisibility(obj, &itr);
if(!cansee && isvisible)
{
plObj2->PushOutOfRange(obj->GetNewGUID());
plObj2->RemoveVisibleObject(itr);
}
else if(cansee && !isvisible)
{
CHECK_BUF;
count = obj->BuildCreateUpdateBlockForPlayer(*buf, plObj2);
plObj2->PushCreationData(*buf, count);
plObj2->AddVisibleObject(obj);
(*buf)->clear();
}
}
if( plObj )
{
cansee = plObj->CanSee( curObj );
isvisible = plObj->GetVisibility( curObj, &itr );
if(!cansee && isvisible)
{
plObj->PushOutOfRange( curObj->GetNewGUID() );
plObj->RemoveVisibleObject( itr );
}
else if(cansee && !isvisible)
{
CHECK_BUF;
count = curObj->BuildCreateUpdateBlockForPlayer( *buf, plObj );
//.........这里部分代码省略.........
示例2: UpdateInRangeSet
void MapMgr::UpdateInRangeSet(Object* obj, Player* plObj, MapCell* cell, ByteBuffer** buf)
{
#define CHECK_BUF if(!*buf) *buf = new ByteBuffer(2500)
if(cell == NULL)
return;
Object* curObj;
Player* plObj2;
int count;
float fRange;
bool cansee, isvisible;
ObjectSet::iterator iter = cell->Begin();
while(iter != cell->End())
{
curObj = *iter;
++iter;
if(curObj == NULL)
continue;
if(curObj->IsPlayer() && obj->IsPlayer() && plObj != NULL && plObj->transporter_info.guid && plObj->transporter_info.guid == TO< Player* >(curObj)->transporter_info.guid)
fRange = 0.0f; // unlimited distance for people on same boat
else if(curObj->GetTypeFromGUID() == HIGHGUID_TYPE_TRANSPORTER)
fRange = 0.0f; // unlimited distance for transporters (only up to 2 cells +/- anyway.)
//If the object announcing its position is a transport, or other special object, then deleting it from visible objects should be avoided. - By: VLack
else if(obj->IsGameObject() && (TO< GameObject* >(obj)->GetOverrides() & GAMEOBJECT_INFVIS) && obj->GetMapId() == curObj->GetMapId())
fRange = 0.0f;
//If the object we're checking for possible removal is a transport or other special object, and we are players on the same map, don't remove it, and add it whenever possible...
else if(plObj && curObj->IsGameObject() && (TO< GameObject* >(curObj)->GetOverrides() & GAMEOBJECT_INFVIS) && obj->GetMapId() == curObj->GetMapId())
fRange = 0.0f;
else
fRange = m_UpdateDistance; // normal distance
if(curObj != obj && (curObj->GetDistance2dSq(obj) <= fRange || fRange == 0.0f))
{
if(!obj->IsInRangeSet(curObj))
{
// Object in range, add to set
obj->AddInRangeObject(curObj);
curObj->AddInRangeObject(obj);
if(curObj->IsPlayer())
{
plObj2 = TO< Player* >(curObj);
if(plObj2->CanSee(obj) && !plObj2->IsVisible(obj->GetGUID()))
{
CHECK_BUF;
count = obj->BuildCreateUpdateBlockForPlayer(*buf, plObj2);
plObj2->PushCreationData(*buf, count);
plObj2->AddVisibleObject(obj->GetGUID());
(*buf)->clear();
}
}
if(plObj != NULL)
{
if(plObj->CanSee(curObj) && !plObj->IsVisible(curObj->GetGUID()))
{
CHECK_BUF;
count = curObj->BuildCreateUpdateBlockForPlayer(*buf, plObj);
plObj->PushCreationData(*buf, count);
plObj->AddVisibleObject(curObj->GetGUID());
(*buf)->clear();
}
}
}
else
{
// Check visibility
if(curObj->IsPlayer())
{
plObj2 = TO< Player* >(curObj);
cansee = plObj2->CanSee(obj);
isvisible = plObj2->IsVisible(obj->GetGUID());
if(!cansee && isvisible)
{
plObj2->PushOutOfRange(obj->GetNewGUID());
plObj2->RemoveVisibleObject(obj->GetGUID());
}
else if(cansee && !isvisible)
{
CHECK_BUF;
count = obj->BuildCreateUpdateBlockForPlayer(*buf, plObj2);
plObj2->PushCreationData(*buf, count);
plObj2->AddVisibleObject(obj->GetGUID());
(*buf)->clear();
}
}
if(plObj != NULL)
{
cansee = plObj->CanSee(curObj);
isvisible = plObj->IsVisible(curObj->GetGUID());
if(!cansee && isvisible)
{
plObj->PushOutOfRange(curObj->GetNewGUID());
//.........这里部分代码省略.........