diff options
| author | Brad Payne (Vir Linden) <vir@lindenlab.com> | 2017-06-27 14:15:42 +0100 |
|---|---|---|
| committer | Brad Payne (Vir Linden) <vir@lindenlab.com> | 2017-06-27 14:15:42 +0100 |
| commit | b6aedb116f60b9e4823f61b945b3f374d9267c1d (patch) | |
| tree | a6bfc5910dff43d9e4153fb7d91784fcb385d1a9 /indra/newview/llvovolume.cpp | |
| parent | 3c8ff04c0fa5c891a0454d7542f78f65eb5032dc (diff) | |
SL-722 - in progress on managing animated object state with linksets
Diffstat (limited to 'indra/newview/llvovolume.cpp')
| -rw-r--r-- | indra/newview/llvovolume.cpp | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 150769845b..da24d9f9c2 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -3314,6 +3314,10 @@ bool LLVOVolume::canBeAnimatedObject() const { return false; } + if (isAttachment()) + { + return false; + } const LLMeshSkinInfo* skin = gMeshRepo.getSkinInfo(getVolume()->getParams().getSculptID(), this); if (!skin) { @@ -4830,20 +4834,24 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) vobj->isMesh() && gMeshRepo.getSkinInfo(vobj->getVolume()->getParams().getSculptID(), vobj); - bool rigged_non_attachment = !vobj->isAttachment() && - vobj->isMesh() && - gMeshRepo.getSkinInfo(vobj->getVolume()->getParams().getSculptID(), vobj); - - if (rigged_non_attachment) + if (vobj->isAnimatedObject()) { - if (!vobj->mControlAvatar) + if (!vobj->getControlAvatar()) { - vobj->mControlAvatar = LLControlAvatar::createControlAvatar(vobj); - vobj->mControlAvatar->addAttachmentOverridesForObject(vobj); + vobj->linkControlAvatar(); } - if (vobj->mControlAvatar) + if (vobj->getControlAvatar()) + { + pAvatarVO = vobj->getControlAvatar(); + } + } + else + { + // Not animated but has a control avatar - probably + // the checkbox has changed since the last rebuild. + if (vobj->getControlAvatar()) { - pAvatarVO = vobj->mControlAvatar; + vobj->unlinkControlAvatar(); } } @@ -4880,7 +4888,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) //sum up face verts and indices drawablep->updateFaceSize(i); - if (rigged || (vobj->mControlAvatar && vobj->mControlAvatar->mPlaying)) + if (rigged || (vobj->getControlAvatar() && vobj->getControlAvatar()->mPlaying)) { if (!facep->isState(LLFace::RIGGED)) { //completely reset vertex buffer |
