diff options
Diffstat (limited to 'indra')
-rw-r--r-- | indra/newview/llvoavatar.cpp | 66 | ||||
-rw-r--r-- | indra/newview/llvoavatar.h | 9 |
2 files changed, 69 insertions, 6 deletions
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index e2205b6b5f..c19a6ab0e0 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -3731,7 +3731,7 @@ void LLVOAvatar::updateAnimationDebugText() } else if (object->isAttachment()) { - name += "(" + getAttachmentItemName() + ")"; + name += "(att:" + getAttachmentItemName() + ")"; } else { @@ -10477,14 +10477,70 @@ void LLVOAvatar::setVisualMuteSettings(VisualMuteSettings set) LLRenderMuteList::getInstance()->saveVisualMuteSetting(getID(), S32(set)); } +void LLVOAvatar::setOverallAppearanceNormal() +{ + resetSkeleton(false); + for (auto it = mJellyAnims.begin(); it != mJellyAnims.end(); ++it) + { + bool is_playing = (mPlayingAnimations.find(*it) != mPlayingAnimations.end()); + LL_DEBUGS("Avatar") << "jelly anim " << *it << " " << is_playing << LL_ENDL; + if (!is_playing) + { + // Anim was not requested for this av by sim, but may be playing locally + stopMotion(*it); + } + } + mJellyAnims.clear(); +} + +void LLVOAvatar::setOverallAppearanceJellyDoll() +{ + resetSkeleton(false); + // stop current animations + { + for ( LLVOAvatar::AnimIterator anim_it= mPlayingAnimations.begin(); + anim_it != mPlayingAnimations.end(); + ++anim_it) + { + if (anim_it->first != ANIM_AGENT_STAND) + { + stopMotion(anim_it->first); + } + } + } + // start the default stand + bool stand_is_playing = (mPlayingAnimations.find(ANIM_AGENT_STAND) != mPlayingAnimations.end()); + if (!stand_is_playing) + { + startMotion(ANIM_AGENT_STAND, 5.0f); + mJellyAnims.insert(ANIM_AGENT_STAND); + } + processAnimationStateChanges(); +} + +void LLVOAvatar::setOverallAppearanceInvisible() +{ +} + void LLVOAvatar::updateOverallAppearance() { - AvatarOverallAppearance new_val = getOverallAppearance(); - if (new_val != mOverallAppearance) + AvatarOverallAppearance new_overall = getOverallAppearance(); + if (new_overall != mOverallAppearance) { - updateAttachmentOverrides(); + switch(new_overall) + { + case AOA_NORMAL: + setOverallAppearanceNormal(); + break; + case AOA_JELLYDOLL: + setOverallAppearanceJellyDoll(); + break; + case AOA_INVISIBLE: + setOverallAppearanceInvisible(); + break; + } + mOverallAppearance = new_overall; } - mOverallAppearance = new_val; } // Based on isVisuallyMuted(), but has 3 possible results. diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index a73b48863b..08f7706506 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -459,9 +459,16 @@ public: AOA_JELLYDOLL, AOA_INVISIBLE }; + AvatarOverallAppearance getOverallAppearance() const; + void setOverallAppearanceNormal(); + void setOverallAppearanceJellyDoll(); + void setOverallAppearanceInvisible(); + void updateOverallAppearance(); - + + std::set<LLUUID> mJellyAnims; + U32 renderRigid(); U32 renderSkinned(); F32 getLastSkinTime() { return mLastSkinTime; } |