diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/llselectmgr.cpp | 21 | ||||
| -rw-r--r-- | indra/newview/llselectmgr.h | 1 | ||||
| -rw-r--r-- | indra/newview/llviewermessage.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llvovolume.cpp | 18 | 
4 files changed, 33 insertions, 9 deletions
| diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 81fd228997..e8b2d1ec8c 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -691,7 +691,7 @@ bool LLSelectMgr::enableLinkObjects()  			new_value = LLSelectMgr::getInstance()->getSelection()->applyToRootObjects(&func, firstonly);  		}  	} -    if (!LLSelectMgr::getInstance()->getSelection()->checkAnimatedObjectEstTris()) +    if (!LLSelectMgr::getInstance()->getSelection()->checkAnimatedObjectLinkable())      {          new_value = false;      } @@ -7434,10 +7434,9 @@ bool LLObjectSelection::checkAnimatedObjectEstTris()      F32 est_tris = 0;      F32 max_tris = 0;      S32 anim_count = 0; -	for (root_iterator iter = root_begin(); iter != root_end(); ) +	for (root_iterator iter = root_begin(); iter != root_end(); ++iter)  	{ -		root_iterator nextiter = iter++; -		LLViewerObject* object = (*nextiter)->getObject(); +		LLViewerObject* object = (*iter)->getObject();  		if (!object)  			continue;          if (object->isAnimatedObject()) @@ -7450,6 +7449,20 @@ bool LLObjectSelection::checkAnimatedObjectEstTris()  	return anim_count==0 || est_tris <= max_tris;  } +bool LLObjectSelection::checkAnimatedObjectLinkable() +{ +    // Can't link if any of the roots is currently an animated object +	for (root_iterator iter = root_begin(); iter != root_end(); ++iter) +	{ +        LLViewerObject* objectp = (*iter)->getObject(); +        if (objectp && objectp->isAnimatedObject()) +        { +            return false; +        } +	} +	return true; +} +  bool LLObjectSelection::applyToRootObjects(LLSelectedObjectFunctor* func, bool firstonly)  {  	bool result = firstonly ? false : true; diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h index 4e79cb003d..fcbfd5fccd 100644 --- a/indra/newview/llselectmgr.h +++ b/indra/newview/llselectmgr.h @@ -341,6 +341,7 @@ public:      // AXON validate a potential link against limits      bool checkAnimatedObjectEstTris(); +    bool checkAnimatedObjectLinkable();  	// Apply functors to various subsets of the selected objects  	// If firstonly is FALSE, returns the AND of all apply() calls. diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 3834082f78..0f567ba5ac 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -5113,7 +5113,7 @@ void process_object_animation(LLMessageSystem *mesgsys, void **user_data)  	S32 num_blocks = mesgsys->getNumberOfBlocksFast(_PREHASH_AnimationList);  	LL_DEBUGS("AXON") << "processing object animation requests, num_blocks " << num_blocks << LL_ENDL; -#if 0  +#if 1       if (!avatarp->mPlaying)      {          avatarp->mPlaying = true; diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 004f335a5a..bb28d5d83e 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -3413,6 +3413,8 @@ bool LLVOVolume::isAnimatedObject() const  {      LLVOVolume *root_vol = (LLVOVolume*)getRootEdit();      bool root_is_animated_flag = root_vol->getExtendedMeshFlags() & LLExtendedMeshParams::ANIMATED_MESH_ENABLED_FLAG; +    return root_is_animated_flag; +#if 0      if (root_is_animated_flag)      {          bool root_can_be_animated = root_vol->canBeAnimatedObject(); @@ -3423,6 +3425,7 @@ bool LLVOVolume::isAnimatedObject() const          }      }      return false; +#endif  }  // Make sure animated objects in a linkset are consistent. The rules are: @@ -4008,10 +4011,17 @@ void LLVOVolume::parameterChanged(U16 param_type, LLNetworkData* data, BOOL in_u  void LLVOVolume::setSelected(BOOL sel)  {  	LLViewerObject::setSelected(sel); -	if (mDrawable.notNull()) -	{ -		markForUpdate(TRUE); -	} +    if (isAnimatedObject()) +    { +        getRootEdit()->recursiveMarkForUpdate(TRUE); +    } +    else +    { +        if (mDrawable.notNull()) +        { +            markForUpdate(TRUE); +        } +    }  }  void LLVOVolume::updateSpatialExtents(LLVector4a& newMin, LLVector4a& newMax) | 
