STORM-954 patch correction
parent
0c02401498
commit
03c9c4da84
|
|
@ -1454,6 +1454,29 @@ void LLWorld::getAvatars(uuid_vec_t* avatar_ids, std::vector<LLVector3d>* positi
|
|||
{
|
||||
positions->clear();
|
||||
}
|
||||
// get the list of avatars from the character list first, so distances are correct
|
||||
// when agent is above 1020m and other avatars are nearby
|
||||
for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin();
|
||||
iter != LLCharacter::sInstances.end(); ++iter)
|
||||
{
|
||||
LLVOAvatar* pVOAvatar = (LLVOAvatar*) *iter;
|
||||
if(!pVOAvatar->isDead() && !pVOAvatar->isSelf())
|
||||
{
|
||||
LLUUID uuid = pVOAvatar->getID();
|
||||
if(!uuid.isNull())
|
||||
{
|
||||
LLVector3d pos_global = pVOAvatar->getPositionGlobal();
|
||||
if(dist_vec(pos_global, relative_to) <= radius)
|
||||
{
|
||||
if(positions != NULL)
|
||||
positions->push_back(pos_global);
|
||||
if(avatar_ids !=NULL)
|
||||
avatar_ids->push_back(uuid);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// region avatars added for situations where radius is greater than RenderFarClip
|
||||
for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();
|
||||
iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
|
||||
{
|
||||
|
|
@ -1465,48 +1488,14 @@ void LLWorld::getAvatars(uuid_vec_t* avatar_ids, std::vector<LLVector3d>* positi
|
|||
LLVector3d pos_global = unpackLocalToGlobalPosition(regionp->mMapAvatars.get(i), origin_global);
|
||||
if(dist_vec(pos_global, relative_to) <= radius)
|
||||
{
|
||||
if(positions != NULL)
|
||||
{
|
||||
positions->push_back(pos_global);
|
||||
}
|
||||
if(avatar_ids != NULL)
|
||||
{
|
||||
avatar_ids->push_back(regionp->mMapAvatarIDs.get(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// retrieve the list of close avatars from viewer objects as well
|
||||
// for when we are above 1000m, only do this when we are retrieving
|
||||
// uuid's too as there could be duplicates
|
||||
if(avatar_ids != NULL)
|
||||
{
|
||||
for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin();
|
||||
iter != LLCharacter::sInstances.end(); ++iter)
|
||||
{
|
||||
LLVOAvatar* pVOAvatar = (LLVOAvatar*) *iter;
|
||||
if(pVOAvatar->isDead() || pVOAvatar->isSelf())
|
||||
continue;
|
||||
LLUUID uuid = pVOAvatar->getID();
|
||||
if(uuid.isNull())
|
||||
continue;
|
||||
LLVector3d pos_global = pVOAvatar->getPositionGlobal();
|
||||
if(dist_vec(pos_global, relative_to) <= radius)
|
||||
{
|
||||
bool found = false;
|
||||
uuid_vec_t::iterator sel_iter = avatar_ids->begin();
|
||||
for (; sel_iter != avatar_ids->end(); sel_iter++)
|
||||
{
|
||||
if(*sel_iter == uuid)
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!found)
|
||||
LLUUID uuid = regionp->mMapAvatarIDs.get(i);
|
||||
// if this avatar doesn't already exist in the list, add it
|
||||
if(uuid.notNull() && avatar_ids!=NULL && std::find(avatar_ids->begin(), avatar_ids->end(), uuid) == avatar_ids->end())
|
||||
{
|
||||
if(positions != NULL)
|
||||
{
|
||||
positions->push_back(pos_global);
|
||||
}
|
||||
avatar_ids->push_back(uuid);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue