diff options
Diffstat (limited to 'indra')
-rw-r--r-- | indra/newview/llcontrolavatar.cpp | 24 | ||||
-rw-r--r-- | indra/newview/lldrawable.cpp | 3 | ||||
-rw-r--r-- | indra/newview/llselectmgr.cpp | 5 | ||||
-rw-r--r-- | indra/newview/llviewerobject.cpp | 6 | ||||
-rw-r--r-- | indra/newview/llviewerobject.h | 4 |
5 files changed, 36 insertions, 6 deletions
diff --git a/indra/newview/llcontrolavatar.cpp b/indra/newview/llcontrolavatar.cpp index 94e5666a70..e9df81e255 100644 --- a/indra/newview/llcontrolavatar.cpp +++ b/indra/newview/llcontrolavatar.cpp @@ -194,7 +194,29 @@ void LLControlAvatar::updateDebugText() std::vector<LLVOVolume*> volumes; getAnimatedVolumes(volumes); S32 animated_volume_count = volumes.size(); - addDebugText(llformat("CAV obj %d anim %d", total_linkset_count, animated_volume_count)); + std::string active_string; + for (std::vector<LLVOVolume*>::iterator it = volumes.begin(); + it != volumes.end(); ++it) + { + LLVOVolume *volp = *it; + if (volp && volp->mDrawable) + { + if (volp->mDrawable->isActive()) + { + active_string += "A"; + } + else + { + active_string += "S"; + } + } + else + { + active_string += "-"; + } + } + addDebugText(llformat("CAV obj %d anim %d active %s", + total_linkset_count, animated_volume_count, active_string.c_str())); #if 0 // AXON - detailed rigged mesh info for (std::vector<LLVOVolume*>::iterator it = volumes.begin(); diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp index f956023358..61ebf947dd 100644 --- a/indra/newview/lldrawable.cpp +++ b/indra/newview/lldrawable.cpp @@ -550,7 +550,8 @@ void LLDrawable::makeStatic(BOOL warning_enabled) if (isState(ACTIVE) && !isState(ACTIVE_CHILD) && !mVObjp->isAttachment() && - !mVObjp->isFlexible()) + !mVObjp->isFlexible() && + !mVObjp->isAnimatedObject()) { clearState(ACTIVE | ANIMATED_CHILD); diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 7bf60d6ffb..b6b7d5265b 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -6764,10 +6764,9 @@ void LLSelectMgr::pauseAssociatedAvatars() } else { - LLVOVolume *volp = dynamic_cast<LLVOVolume*>(object); - if (volp && volp->isAnimatedObject() && volp->getControlAvatar()) + if (object && object->isAnimatedObject() && object->getControlAvatar()) { - mPauseRequests.push_back(volp->getControlAvatar()->requestPause()); + mPauseRequests.push_back(object->getControlAvatar()->requestPause()); } } } diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index c6051650cf..cb9f9e0455 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -2965,6 +2965,12 @@ void LLViewerObject::unlinkControlAvatar() // automatically remove the control avatar connection. } +// virtual +bool LLViewerObject::isAnimatedObject() const +{ + return false; +} + struct LLFilenameAndTask { LLUUID mTaskID; diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index 1967841fd9..c79ff7bb74 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -693,7 +693,9 @@ public: void linkControlAvatar(); // Remove any reference to control av for this prim void unlinkControlAvatar(); - + + virtual bool isAnimatedObject() const; + protected: LLPointer<LLControlAvatar> mControlAvatar; |