diff options
Diffstat (limited to 'indra/llcharacter')
-rw-r--r-- | indra/llcharacter/llanimationstates.cpp | 7 | ||||
-rw-r--r-- | indra/llcharacter/llbvhloader.cpp | 77 | ||||
-rw-r--r-- | indra/llcharacter/llcharacter.cpp | 4 | ||||
-rw-r--r-- | indra/llcharacter/llcharacter.h | 13 | ||||
-rw-r--r-- | indra/llcharacter/llgesture.cpp | 9 | ||||
-rw-r--r-- | indra/llcharacter/lljoint.cpp | 57 | ||||
-rw-r--r-- | indra/llcharacter/llkeyframemotion.cpp | 265 | ||||
-rw-r--r-- | indra/llcharacter/llkeyframemotion.h | 7 | ||||
-rw-r--r-- | indra/llcharacter/llkeyframemotionparam.cpp | 58 | ||||
-rw-r--r-- | indra/llcharacter/llmotioncontroller.cpp | 27 | ||||
-rw-r--r-- | indra/llcharacter/llmultigesture.cpp | 4 | ||||
-rw-r--r-- | indra/llcharacter/llpose.cpp | 6 | ||||
-rw-r--r-- | indra/llcharacter/llstatemachine.cpp | 58 |
13 files changed, 271 insertions, 321 deletions
diff --git a/indra/llcharacter/llanimationstates.cpp b/indra/llcharacter/llanimationstates.cpp index c16cae1bbc..2e78e30405 100644 --- a/indra/llcharacter/llanimationstates.cpp +++ b/indra/llcharacter/llanimationstates.cpp @@ -379,12 +379,11 @@ LLUUID LLAnimationLibrary::stringToAnimState( const std::string& name, BOOL allo if (true_name) { - for (anim_map_t::iterator iter = mAnimMap.begin(); - iter != mAnimMap.end(); iter++) + for (anim_map_t::value_type& anim_pair : mAnimMap) { - if (iter->second == true_name) + if (anim_pair.second == true_name) { - id = iter->first; + id = anim_pair.first; break; } } diff --git a/indra/llcharacter/llbvhloader.cpp b/indra/llcharacter/llbvhloader.cpp index c38614b0b4..117d408b21 100644 --- a/indra/llcharacter/llbvhloader.cpp +++ b/indra/llcharacter/llbvhloader.cpp @@ -156,10 +156,9 @@ LLBVHLoader::LLBVHLoader(const char* buffer, ELoadStatus &loadStatus, S32 &error } // Recognize all names we've been told are legal. - std::map<std::string, std::string>::iterator iter; - for (iter = joint_alias_map.begin(); iter != joint_alias_map.end(); iter++) + for (std::map<std::string, std::string>::value_type& alias_pair : joint_alias_map) { - makeTranslation( iter->first , iter->second ); + makeTranslation( alias_pair.first , alias_pair.second ); } char error_text[128]; /* Flawfinder: ignore */ @@ -950,10 +949,8 @@ ELoadStatus LLBVHLoader::loadBVHFile(const char *buffer, char* error_text, S32 & //------------------------------------------------------------------------ void LLBVHLoader::applyTranslations() { - JointVector::iterator ji; - for (ji = mJoints.begin(); ji != mJoints.end(); ++ji ) + for (Joint* joint : mJoints) { - Joint *joint = *ji; //---------------------------------------------------------------- // Look for a translation for this joint. // If none, skip to next joint @@ -1066,10 +1063,8 @@ void LLBVHLoader::optimize() mEaseOut *= factor; } - JointVector::iterator ji; - for (ji = mJoints.begin(); ji != mJoints.end(); ++ji) + for (Joint* joint : mJoints) { - Joint *joint = *ji; BOOL pos_changed = FALSE; BOOL rot_changed = FALSE; @@ -1294,15 +1289,12 @@ U32 LLBVHLoader::getOutputSize() // writes contents to datapacker BOOL LLBVHLoader::serialize(LLDataPacker& dp) { - JointVector::iterator ji; - KeyVector::iterator ki; F32 time; // count number of non-ignored joints S32 numJoints = 0; - for (ji=mJoints.begin(); ji!=mJoints.end(); ++ji) + for (Joint* joint : mJoints) { - Joint *joint = *ji; if ( ! joint->mIgnore ) numJoints++; } @@ -1321,11 +1313,8 @@ BOOL LLBVHLoader::serialize(LLDataPacker& dp) dp.packU32(mHand, "hand_pose"); dp.packU32(numJoints, "num_joints"); - for ( ji = mJoints.begin(); - ji != mJoints.end(); - ++ji ) + for (Joint* joint : mJoints) { - Joint *joint = *ji; // if ignored, skip it if ( joint->mIgnore ) continue; @@ -1348,17 +1337,15 @@ BOOL LLBVHLoader::serialize(LLDataPacker& dp) Joint *mergeParent = NULL; Joint *mergeChild = NULL; - JointVector::iterator mji; - for (mji=mJoints.begin(); mji!=mJoints.end(); ++mji) + for (Joint* mjoint : mJoints) { - Joint *mjoint = *mji; if ( !joint->mMergeParentName.empty() && (mjoint->mName == joint->mMergeParentName) ) { - mergeParent = *mji; + mergeParent = mjoint; } if ( !joint->mMergeChildName.empty() && (mjoint->mName == joint->mMergeChildName) ) { - mergeChild = *mji; + mergeChild = mjoint; } } @@ -1367,19 +1354,17 @@ BOOL LLBVHLoader::serialize(LLDataPacker& dp) LLQuaternion::Order order = bvhStringToOrder( joint->mOrder ); S32 outcount = 0; S32 frame = 0; - for ( ki = joint->mKeys.begin(); - ki != joint->mKeys.end(); - ++ki ) + for (Key& key : joint->mKeys) { if ((frame == 0) && joint->mRelativeRotationKey) { - first_frame_rot = mayaQ( ki->mRot[0], ki->mRot[1], ki->mRot[2], order); + first_frame_rot = mayaQ( key.mRot[0], key.mRot[1], key.mRot[2], order); fixup_rot.shortestArc(LLVector3::z_axis * first_frame_rot * frameRot, LLVector3::z_axis); } - if (ki->mIgnoreRot) + if (key.mIgnoreRot) { frame++; continue; @@ -1418,7 +1403,7 @@ BOOL LLBVHLoader::serialize(LLDataPacker& dp) mergeChildRot.loadIdentity(); } - LLQuaternion inRot = mayaQ( ki->mRot[0], ki->mRot[1], ki->mRot[2], order); + LLQuaternion inRot = mayaQ( key.mRot[0], key.mRot[1], key.mRot[2], order); LLQuaternion outRot = frameRotInv* mergeChildRot * inRot * mergeParentRot * ~first_frame_rot * frameRot * offsetRot; @@ -1446,16 +1431,14 @@ BOOL LLBVHLoader::serialize(LLDataPacker& dp) LLVector3 relKey; frame = 0; - for ( ki = joint->mKeys.begin(); - ki != joint->mKeys.end(); - ++ki ) + for (Key& key : joint->mKeys) { if ((frame == 0) && joint->mRelativePositionKey) { - relKey.setVec(ki->mPos); + relKey.setVec(key.mPos); } - if (ki->mIgnorePos) + if (key.mIgnorePos) { frame++; continue; @@ -1463,7 +1446,7 @@ BOOL LLBVHLoader::serialize(LLDataPacker& dp) time = llmax((F32)(frame - NUMBER_OF_IGNORED_FRAMES_AT_START), 0.0f) * mFrameTime; // Time elapsed before this frame starts. - LLVector3 inPos = (LLVector3(ki->mPos) - relKey) * ~first_frame_rot;// * fixup_rot; + LLVector3 inPos = (LLVector3(key.mPos) - relKey) * ~first_frame_rot;// * fixup_rot; LLVector3 outPos = inPos * frameRot * offsetRot; outPos *= INCHES_TO_METERS; @@ -1496,24 +1479,22 @@ BOOL LLBVHLoader::serialize(LLDataPacker& dp) S32 num_constraints = (S32)mConstraints.size(); dp.packS32(num_constraints, "num_constraints"); - for (ConstraintVector::iterator constraint_it = mConstraints.begin(); - constraint_it != mConstraints.end(); - constraint_it++) + for (Constraint& constraint : mConstraints) { - U8 byte = constraint_it->mChainLength; + U8 byte = constraint.mChainLength; dp.packU8(byte, "chain_length"); - byte = constraint_it->mConstraintType; + byte = constraint.mConstraintType; dp.packU8(byte, "constraint_type"); - dp.packBinaryDataFixed((U8*)constraint_it->mSourceJointName, 16, "source_volume"); - dp.packVector3(constraint_it->mSourceOffset, "source_offset"); - dp.packBinaryDataFixed((U8*)constraint_it->mTargetJointName, 16, "target_volume"); - dp.packVector3(constraint_it->mTargetOffset, "target_offset"); - dp.packVector3(constraint_it->mTargetDir, "target_dir"); - dp.packF32(constraint_it->mEaseInStart, "ease_in_start"); - dp.packF32(constraint_it->mEaseInStop, "ease_in_stop"); - dp.packF32(constraint_it->mEaseOutStart, "ease_out_start"); - dp.packF32(constraint_it->mEaseOutStop, "ease_out_stop"); + dp.packBinaryDataFixed((U8*)constraint.mSourceJointName, 16, "source_volume"); + dp.packVector3(constraint.mSourceOffset, "source_offset"); + dp.packBinaryDataFixed((U8*)constraint.mTargetJointName, 16, "target_volume"); + dp.packVector3(constraint.mTargetOffset, "target_offset"); + dp.packVector3(constraint.mTargetDir, "target_dir"); + dp.packF32(constraint.mEaseInStart, "ease_in_start"); + dp.packF32(constraint.mEaseInStop, "ease_in_stop"); + dp.packF32(constraint.mEaseOutStart, "ease_out_start"); + dp.packF32(constraint.mEaseOutStop, "ease_out_stop"); } diff --git a/indra/llcharacter/llcharacter.cpp b/indra/llcharacter/llcharacter.cpp index 376f096642..cf6be8daf0 100644 --- a/indra/llcharacter/llcharacter.cpp +++ b/indra/llcharacter/llcharacter.cpp @@ -246,10 +246,8 @@ void LLCharacter::dumpCharacter( LLJoint* joint ) LL_INFOS() << "DEBUG: " << joint->getName() << " (" << (joint->getParent()?joint->getParent()->getName():std::string("ROOT")) << ")" << LL_ENDL; // recurse - for (LLJoint::joints_t::iterator iter = joint->mChildren.begin(); - iter != joint->mChildren.end(); ++iter) + for (LLJoint* child_joint : joint->mChildren) { - LLJoint* child_joint = *iter; dumpCharacter(child_joint); } } diff --git a/indra/llcharacter/llcharacter.h b/indra/llcharacter/llcharacter.h index 2fac5f53a6..6d56d59e8c 100644 --- a/indra/llcharacter/llcharacter.h +++ b/indra/llcharacter/llcharacter.h @@ -218,11 +218,9 @@ public: S32 getVisualParamCountInGroup(const EVisualParamGroup group) const { S32 rtn = 0; - for (visual_param_index_map_t::const_iterator iter = mVisualParamIndexMap.begin(); - iter != mVisualParamIndexMap.end(); - /**/ ) + for (const visual_param_index_map_t::value_type& index_pair : mVisualParamIndexMap) { - if ((iter++)->second->getGroup() == group) + if (index_pair.second->getGroup() == group) { ++rtn; } @@ -237,11 +235,10 @@ public: } S32 getVisualParamID(LLVisualParam *id) { - visual_param_index_map_t::iterator iter; - for (iter = mVisualParamIndexMap.begin(); iter != mVisualParamIndexMap.end(); iter++) + for (visual_param_index_map_t::value_type& index_pair : mVisualParamIndexMap) { - if (iter->second == id) - return iter->first; + if (index_pair.second == id) + return index_pair.first; } return 0; } diff --git a/indra/llcharacter/llgesture.cpp b/indra/llcharacter/llgesture.cpp index 37904936d8..80717d8d26 100644 --- a/indra/llcharacter/llgesture.cpp +++ b/indra/llcharacter/llgesture.cpp @@ -199,15 +199,14 @@ BOOL LLGestureList::triggerAndReviseString(const std::string &string, std::strin typedef boost::tokenizer<boost::char_separator<char> > tokenizer; boost::char_separator<char> sep(" "); tokenizer tokens(string, sep); - tokenizer::iterator token_iter; - for( token_iter = tokens.begin(); token_iter != tokens.end(); ++token_iter) + for(const std::string& cur_token : tokens) { LLGesture* gesture = NULL; if( !found_gestures ) // Only pay attention to the first gesture in the string. { - std::string cur_token_lower = *token_iter; + std::string cur_token_lower = cur_token; LLStringUtil::toLower(cur_token_lower); for (U32 i = 0; i < mList.size(); i++) @@ -228,7 +227,7 @@ BOOL LLGestureList::triggerAndReviseString(const std::string &string, std::strin LLStringUtil::toLower(output_lower); if( cur_token_lower == output_lower ) { - revised_string->append(*token_iter); + revised_string->append(cur_token); } else { @@ -249,7 +248,7 @@ BOOL LLGestureList::triggerAndReviseString(const std::string &string, std::strin { revised_string->append( " " ); } - revised_string->append( *token_iter ); + revised_string->append( cur_token ); } first_token = FALSE; diff --git a/indra/llcharacter/lljoint.cpp b/indra/llcharacter/lljoint.cpp index d72282ab42..06f3bedf85 100644 --- a/indra/llcharacter/lljoint.cpp +++ b/indra/llcharacter/lljoint.cpp @@ -67,11 +67,10 @@ void LLVector3OverrideMap::showJointVector3Overrides( std::ostringstream& os ) c map_type::const_iterator max_it = std::max_element(m_map.begin(), m_map.end(), attachment_map_iter_compare_key<map_type::value_type>); - for (map_type::const_iterator it = m_map.begin(); - it != m_map.end(); ++it) + for (const map_type::value_type& pos_pair : m_map) { - const LLVector3& pos = it->second; - os << " " << "[" << it->first <<": " << pos << "]" << ((it==max_it) ? "*" : ""); + const LLVector3& pos = pos_pair.second; + os << " " << "[" << pos_pair.first <<": " << pos << "]" << ((pos_pair==(*max_it)) ? "*" : ""); } } @@ -209,10 +208,8 @@ void LLJoint::touch(U32 flags) child_flags |= POSITION_DIRTY; } - for (joints_t::iterator iter = mChildren.begin(); - iter != mChildren.end(); ++iter) + for (LLJoint* joint : mChildren) { - LLJoint* joint = *iter; joint->touch(child_flags); } } @@ -251,10 +248,8 @@ LLJoint *LLJoint::findJoint( const std::string &name ) if (name == getName()) return this; - for (joints_t::iterator iter = mChildren.begin(); - iter != mChildren.end(); ++iter) + for (LLJoint* joint : mChildren) { - LLJoint* joint = *iter; LLJoint *found = joint->findJoint(name); if (found) { @@ -514,10 +509,9 @@ void LLJoint::getAllAttachmentPosOverrides(S32& num_pos_overrides, std::set<LLVector3>& distinct_pos_overrides) const { num_pos_overrides = m_attachmentPosOverrides.count(); - LLVector3OverrideMap::map_type::const_iterator it = m_attachmentPosOverrides.getMap().begin(); - for (; it != m_attachmentPosOverrides.getMap().end(); ++it) + for (const LLVector3OverrideMap::map_type::value_type& pos_override_pair : m_attachmentPosOverrides.getMap()) { - distinct_pos_overrides.insert(it->second); + distinct_pos_overrides.insert(pos_override_pair.second); } } @@ -528,10 +522,9 @@ void LLJoint::getAllAttachmentScaleOverrides(S32& num_scale_overrides, std::set<LLVector3>& distinct_scale_overrides) const { num_scale_overrides = m_attachmentScaleOverrides.count(); - LLVector3OverrideMap::map_type::const_iterator it = m_attachmentScaleOverrides.getMap().begin(); - for (; it != m_attachmentScaleOverrides.getMap().end(); ++it) + for (const LLVector3OverrideMap::map_type::value_type& scale_override_pair : m_attachmentScaleOverrides.getMap()) { - distinct_scale_overrides.insert(it->second); + distinct_scale_overrides.insert(scale_override_pair.second); } } @@ -556,10 +549,9 @@ void LLJoint::showAttachmentPosOverrides(const std::string& av_info) const { LL_DEBUGS("Avatar") << "av " << av_info << " joint " << getName() << " has " << count << " attachment pos overrides" << LL_ENDL; std::set<LLVector3> distinct_offsets; - LLVector3OverrideMap::map_type::const_iterator it = m_attachmentPosOverrides.getMap().begin(); - for (; it != m_attachmentPosOverrides.getMap().end(); ++it) + for (const LLVector3OverrideMap::map_type::value_type& pos_override_pair : m_attachmentPosOverrides.getMap()) { - distinct_offsets.insert(it->second); + distinct_offsets.insert(pos_override_pair.second); } if (distinct_offsets.size()>1) { @@ -569,11 +561,10 @@ void LLJoint::showAttachmentPosOverrides(const std::string& av_info) const { LL_DEBUGS("Avatar") << "no conflicts" << LL_ENDL; } - std::set<LLVector3>::iterator dit = distinct_offsets.begin(); - for ( ; dit != distinct_offsets.end(); ++dit) + for (const LLVector3& offset : distinct_offsets) { - std::string highlight = (has_active_override && *dit == active_override) ? "*" : ""; - LL_DEBUGS("Avatar") << " POS " << highlight << "" << (*dit) << " default " << mDefaultPosition << LL_ENDL; + std::string highlight = (has_active_override && offset == active_override) ? "*" : ""; + LL_DEBUGS("Avatar") << " POS " << highlight << "" << offset << " default " << mDefaultPosition << LL_ENDL; } } } @@ -717,10 +708,9 @@ void LLJoint::showAttachmentScaleOverrides(const std::string& av_info) const { LL_DEBUGS("Avatar") << "av " << av_info << " joint " << getName() << " has " << count << " attachment scale overrides" << LL_ENDL; std::set<LLVector3> distinct_offsets; - LLVector3OverrideMap::map_type::const_iterator it = m_attachmentScaleOverrides.getMap().begin(); - for (; it != m_attachmentScaleOverrides.getMap().end(); ++it) + for (const LLVector3OverrideMap::map_type::value_type& scale_override_pair : m_attachmentScaleOverrides.getMap()) { - distinct_offsets.insert(it->second); + distinct_offsets.insert(scale_override_pair.second); } if (distinct_offsets.size()>1) { @@ -730,11 +720,10 @@ void LLJoint::showAttachmentScaleOverrides(const std::string& av_info) const { LL_DEBUGS("Avatar") << "no conflicts" << LL_ENDL; } - std::set<LLVector3>::iterator dit = distinct_offsets.begin(); - for ( ; dit != distinct_offsets.end(); ++dit) + for (const LLVector3& offset : distinct_offsets) { - std::string highlight = (has_active_override && *dit == active_override) ? "*" : ""; - LL_DEBUGS("Avatar") << " POS " << highlight << "" << (*dit) << " default " << mDefaultScale << LL_ENDL; + std::string highlight = (has_active_override && offset == active_override) ? "*" : ""; + LL_DEBUGS("Avatar") << " POS " << highlight << "" << offset << " default " << mDefaultScale << LL_ENDL; } } } @@ -993,10 +982,8 @@ void LLJoint::updateWorldMatrixChildren() { updateWorldMatrix(); } - for (joints_t::iterator iter = mChildren.begin(); - iter != mChildren.end(); ++iter) + for (LLJoint* joint : mChildren) { - LLJoint* joint = *iter; joint->updateWorldMatrixChildren(); } } @@ -1040,10 +1027,8 @@ void LLJoint::clampRotation(LLQuaternion old_rot, LLQuaternion new_rot) { LLVector3 main_axis(1.f, 0.f, 0.f); - for (joints_t::iterator iter = mChildren.begin(); - iter != mChildren.end(); ++iter) + for (LLJoint* joint : mChildren) { - LLJoint* joint = *iter; if (joint->isAnimatable()) { main_axis = joint->getPosition(); diff --git a/indra/llcharacter/llkeyframemotion.cpp b/indra/llcharacter/llkeyframemotion.cpp index a25ff16786..6720f902bd 100644 --- a/indra/llcharacter/llkeyframemotion.cpp +++ b/indra/llcharacter/llkeyframemotion.cpp @@ -626,10 +626,8 @@ BOOL LLKeyframeMotion::setupPose() } // initialize joint constraints - for (JointMotionList::constraint_list_t::iterator iter = mJointMotionList->mConstraints.begin(); - iter != mJointMotionList->mConstraints.end(); ++iter) + for (JointConstraintSharedData* shared_constraintp : mJointMotionList->mConstraints) { - JointConstraintSharedData* shared_constraintp = *iter; JointConstraint* constraintp = new JointConstraint(shared_constraintp); initializeConstraint(constraintp); mConstraints.push_front(constraintp); @@ -764,19 +762,15 @@ void LLKeyframeMotion::applyConstraints(F32 time, U8* joint_mask) if (mCharacter->getSkeletonSerialNum() != mLastSkeletonSerialNum) { mLastSkeletonSerialNum = mCharacter->getSkeletonSerialNum(); - for (constraint_list_t::iterator iter = mConstraints.begin(); - iter != mConstraints.end(); ++iter) + for (JointConstraint* constraintp : mConstraints) { - JointConstraint* constraintp = *iter; initializeConstraint(constraintp); } } // apply constraints - for (constraint_list_t::iterator iter = mConstraints.begin(); - iter != mConstraints.end(); ++iter) + for (JointConstraint* constraintp : mConstraints) { - JointConstraint* constraintp = *iter; applyConstraint(constraintp, time, joint_mask); } } @@ -786,10 +780,8 @@ void LLKeyframeMotion::applyConstraints(F32 time, U8* joint_mask) //----------------------------------------------------------------------------- void LLKeyframeMotion::onDeactivate() { - for (constraint_list_t::iterator iter = mConstraints.begin(); - iter != mConstraints.end(); ++iter) + for (JointConstraint* constraintp : mConstraints) { - JointConstraint* constraintp = *iter; deactivateConstraint(constraintp); } } @@ -1222,11 +1214,14 @@ void LLKeyframeMotion::applyConstraint(JointConstraint* constraint, F32 time, U8 //----------------------------------------------------------------------------- // deserialize() +// +// allow_invalid_joints should be true when handling existing content, to avoid breakage. +// During upload, we should be more restrictive and reject such animations. //----------------------------------------------------------------------------- -BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) +BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id, bool allow_invalid_joints) { BOOL old_version = FALSE; - mJointMotionList = new LLKeyframeMotion::JointMotionList; + std::unique_ptr<LLKeyframeMotion::JointMotionList> joint_motion_list(new LLKeyframeMotion::JointMotionList); //------------------------------------------------------------------------- // get base priority @@ -1269,16 +1264,16 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) << " for animation " << asset_id << LL_ENDL; return FALSE; } - mJointMotionList->mBasePriority = (LLJoint::JointPriority) temp_priority; + joint_motion_list->mBasePriority = (LLJoint::JointPriority) temp_priority; - if (mJointMotionList->mBasePriority >= LLJoint::ADDITIVE_PRIORITY) + if (joint_motion_list->mBasePriority >= LLJoint::ADDITIVE_PRIORITY) { - mJointMotionList->mBasePriority = (LLJoint::JointPriority)((S32)LLJoint::ADDITIVE_PRIORITY-1); - mJointMotionList->mMaxPriority = mJointMotionList->mBasePriority; + joint_motion_list->mBasePriority = (LLJoint::JointPriority)((S32)LLJoint::ADDITIVE_PRIORITY-1); + joint_motion_list->mMaxPriority = joint_motion_list->mBasePriority; } - else if (mJointMotionList->mBasePriority < LLJoint::USE_MOTION_PRIORITY) + else if (joint_motion_list->mBasePriority < LLJoint::USE_MOTION_PRIORITY) { - LL_WARNS() << "bad animation base_priority " << mJointMotionList->mBasePriority + LL_WARNS() << "bad animation base_priority " << joint_motion_list->mBasePriority << " for animation " << asset_id << LL_ENDL; return FALSE; } @@ -1286,15 +1281,15 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) //------------------------------------------------------------------------- // get duration //------------------------------------------------------------------------- - if (!dp.unpackF32(mJointMotionList->mDuration, "duration")) + if (!dp.unpackF32(joint_motion_list->mDuration, "duration")) { LL_WARNS() << "can't read duration" << " for animation " << asset_id << LL_ENDL; return FALSE; } - if (mJointMotionList->mDuration > MAX_ANIM_DURATION || - !llfinite(mJointMotionList->mDuration)) + if (joint_motion_list->mDuration > MAX_ANIM_DURATION || + !llfinite(joint_motion_list->mDuration)) { LL_WARNS() << "invalid animation duration" << " for animation " << asset_id << LL_ENDL; @@ -1304,14 +1299,14 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) //------------------------------------------------------------------------- // get emote (optional) //------------------------------------------------------------------------- - if (!dp.unpackString(mJointMotionList->mEmoteName, "emote_name")) + if (!dp.unpackString(joint_motion_list->mEmoteName, "emote_name")) { LL_WARNS() << "can't read optional_emote_animation" << " for animation " << asset_id << LL_ENDL; return FALSE; } - if(mJointMotionList->mEmoteName==mID.asString()) + if(joint_motion_list->mEmoteName==mID.asString()) { LL_WARNS() << "Malformed animation mEmoteName==mID" << " for animation " << asset_id << LL_ENDL; @@ -1321,42 +1316,51 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) //------------------------------------------------------------------------- // get loop //------------------------------------------------------------------------- - if (!dp.unpackF32(mJointMotionList->mLoopInPoint, "loop_in_point") || - !llfinite(mJointMotionList->mLoopInPoint)) + if (!dp.unpackF32(joint_motion_list->mLoopInPoint, "loop_in_point") || + !llfinite(joint_motion_list->mLoopInPoint)) { LL_WARNS() << "can't read loop point" << " for animation " << asset_id << LL_ENDL; return FALSE; } - if (!dp.unpackF32(mJointMotionList->mLoopOutPoint, "loop_out_point") || - !llfinite(mJointMotionList->mLoopOutPoint)) + if (!dp.unpackF32(joint_motion_list->mLoopOutPoint, "loop_out_point") || + !llfinite(joint_motion_list->mLoopOutPoint)) { LL_WARNS() << "can't read loop point" << " for animation " << asset_id << LL_ENDL; return FALSE; } - if (!dp.unpackS32(mJointMotionList->mLoop, "loop")) + if (!dp.unpackS32(joint_motion_list->mLoop, "loop")) { LL_WARNS() << "can't read loop" << " for animation " << asset_id << LL_ENDL; return FALSE; } + //SL-17206 hack to alter Female_land loop setting, while current behavior won't be changed serverside + LLUUID const female_land_anim("ca1baf4d-0a18-5a1f-0330-e4bd1e71f09e"); + LLUUID const formal_female_land_anim("6a9a173b-61fa-3ad5-01fa-a851cfc5f66a"); + if (female_land_anim == asset_id || formal_female_land_anim == asset_id) + { + LL_WARNS() << "Animation(" << asset_id << ") won't be looped." << LL_ENDL; + joint_motion_list->mLoop = FALSE; + } + //------------------------------------------------------------------------- // get easeIn and easeOut //------------------------------------------------------------------------- - if (!dp.unpackF32(mJointMotionList->mEaseInDuration, "ease_in_duration") || - !llfinite(mJointMotionList->mEaseInDuration)) + if (!dp.unpackF32(joint_motion_list->mEaseInDuration, "ease_in_duration") || + !llfinite(joint_motion_list->mEaseInDuration)) { LL_WARNS() << "can't read easeIn" << " for animation " << asset_id << LL_ENDL; return FALSE; } - if (!dp.unpackF32(mJointMotionList->mEaseOutDuration, "ease_out_duration") || - !llfinite(mJointMotionList->mEaseOutDuration)) + if (!dp.unpackF32(joint_motion_list->mEaseOutDuration, "ease_out_duration") || + !llfinite(joint_motion_list->mEaseOutDuration)) { LL_WARNS() << "can't read easeOut" << " for animation " << asset_id << LL_ENDL; @@ -1381,7 +1385,7 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) return FALSE; } - mJointMotionList->mHandPose = (LLHandMotion::eHandPose)word; + joint_motion_list->mHandPose = (LLHandMotion::eHandPose)word; //------------------------------------------------------------------------- // get number of joint motions @@ -1407,8 +1411,8 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) return FALSE; } - mJointMotionList->mJointMotionArray.clear(); - mJointMotionList->mJointMotionArray.reserve(num_motions); + joint_motion_list->mJointMotionArray.clear(); + joint_motion_list->mJointMotionArray.reserve(num_motions); mJointStates.clear(); mJointStates.reserve(num_motions); @@ -1419,7 +1423,7 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) for(U32 i=0; i<num_motions; ++i) { JointMotion* joint_motion = new JointMotion; - mJointMotionList->mJointMotionArray.push_back(joint_motion); + joint_motion_list->mJointMotionArray.push_back(joint_motion); std::string joint_name; if (!dp.unpackString(joint_name, "joint_name")) @@ -1443,6 +1447,7 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) if (joint) { S32 joint_num = joint->getJointNum(); + joint_name = joint->getName(); // canonical name in case this is an alias. // LL_INFOS() << " joint: " << joint_name << LL_ENDL; if ((joint_num >= (S32)LL_CHARACTER_MAX_ANIMATED_JOINTS) || (joint_num < 0)) { @@ -1457,7 +1462,10 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) { LL_WARNS() << "invalid joint name: " << joint_name << " for animation " << asset_id << LL_ENDL; - //return FALSE; + if (!allow_invalid_joints) + { + return FALSE; + } } joint_motion->mJointName = joint_name; @@ -1487,9 +1495,9 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) joint_motion->mPriority = (LLJoint::JointPriority)joint_priority; if (joint_priority != LLJoint::USE_MOTION_PRIORITY && - joint_priority > mJointMotionList->mMaxPriority) + joint_priority > joint_motion_list->mMaxPriority) { - mJointMotionList->mMaxPriority = (LLJoint::JointPriority)joint_priority; + joint_motion_list->mMaxPriority = (LLJoint::JointPriority)joint_priority; } joint_state->setPriority((LLJoint::JointPriority)joint_priority); @@ -1540,9 +1548,9 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) return FALSE; } - time = U16_to_F32(time_short, 0.f, mJointMotionList->mDuration); + time = U16_to_F32(time_short, 0.f, joint_motion_list->mDuration); - if (time < 0 || time > mJointMotionList->mDuration) + if (time < 0 || time > joint_motion_list->mDuration) { LL_WARNS() << "invalid frame time" << " for animation " << asset_id << LL_ENDL; @@ -1555,38 +1563,57 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) LLVector3 rot_angles; U16 x, y, z; - BOOL success = TRUE; - if (old_version) { - success = dp.unpackVector3(rot_angles, "rot_angles") && rot_angles.isFinite(); + if (!dp.unpackVector3(rot_angles, "rot_angles")) + { + LL_WARNS() << "can't read rot_angles in rotation key (" << k << ")" << LL_ENDL; + return FALSE; + } + if (!rot_angles.isFinite()) + { + LL_WARNS() << "non-finite angle in rotation key (" << k << ")" << LL_ENDL; + return FALSE; + } LLQuaternion::Order ro = StringToOrder("ZYX"); rot_key.mRotation = mayaQ(rot_angles.mV[VX], rot_angles.mV[VY], rot_angles.mV[VZ], ro); } else { - success &= dp.unpackU16(x, "rot_angle_x"); - success &= dp.unpackU16(y, "rot_angle_y"); - success &= dp.unpackU16(z, "rot_angle_z"); + if (!dp.unpackU16(x, "rot_angle_x")) + { + LL_WARNS() << "can't read rot_angle_x in rotation key (" << k << ")" << LL_ENDL; + return FALSE; + } + if (!dp.unpackU16(y, "rot_angle_y")) + { + LL_WARNS() << "can't read rot_angle_y in rotation key (" << k << ")" << LL_ENDL; + return FALSE; + } + if (!dp.unpackU16(z, "rot_angle_z")) + { + LL_WARNS() << "can't read rot_angle_z in rotation key (" << k << ")" << LL_ENDL; + return FALSE; + } LLVector3 rot_vec; rot_vec.mV[VX] = U16_to_F32(x, -1.f, 1.f); rot_vec.mV[VY] = U16_to_F32(y, -1.f, 1.f); rot_vec.mV[VZ] = U16_to_F32(z, -1.f, 1.f); + + if(!rot_vec.isFinite()) + { + LL_WARNS() << "non-finite angle in rotation key (" << k << ")" + << " for animation " << asset_id << LL_ENDL; + return FALSE; + } rot_key.mRotation.unpackFromVector3(rot_vec); } - if( !(rot_key.mRotation.isFinite()) ) + if(!rot_key.mRotation.isFinite()) { - LL_WARNS() << "non-finite angle in rotation key" - << " for animation " << asset_id << LL_ENDL; - success = FALSE; - } - - if (!success) - { - LL_WARNS() << "can't read rotation key (" << k << ")" + LL_WARNS() << "non-finite angle in rotation key (" << k << ")" << " for animation " << asset_id << LL_ENDL; return FALSE; } @@ -1639,14 +1666,16 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) return FALSE; } - pos_key.mTime = U16_to_F32(time_short, 0.f, mJointMotionList->mDuration); + pos_key.mTime = U16_to_F32(time_short, 0.f, joint_motion_list->mDuration); } - BOOL success = TRUE; - if (old_version) { - success = dp.unpackVector3(pos_key.mPosition, "pos"); + if (!dp.unpackVector3(pos_key.mPosition, "pos")) + { + LL_WARNS() << "can't read pos in position key (" << k << ")" << LL_ENDL; + return FALSE; + } //MAINT-6162 pos_key.mPosition.mV[VX] = llclamp( pos_key.mPosition.mV[VX], -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET); @@ -1658,26 +1687,31 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) { U16 x, y, z; - success &= dp.unpackU16(x, "pos_x"); - success &= dp.unpackU16(y, "pos_y"); - success &= dp.unpackU16(z, "pos_z"); + if (!dp.unpackU16(x, "pos_x")) + { + LL_WARNS() << "can't read pos_x in position key (" << k << ")" << LL_ENDL; + return FALSE; + } + if (!dp.unpackU16(y, "pos_y")) + { + LL_WARNS() << "can't read pos_y in position key (" << k << ")" << LL_ENDL; + return FALSE; + } + if (!dp.unpackU16(z, "pos_z")) + { + LL_WARNS() << "can't read pos_z in position key (" << k << ")" << LL_ENDL; + return FALSE; + } pos_key.mPosition.mV[VX] = U16_to_F32(x, -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET); pos_key.mPosition.mV[VY] = U16_to_F32(y, -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET); pos_key.mPosition.mV[VZ] = U16_to_F32(z, -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET); } - if( !(pos_key.mPosition.isFinite()) ) + if(!pos_key.mPosition.isFinite()) { LL_WARNS() << "non-finite position in key" << " for animation " << asset_id << LL_ENDL; - success = FALSE; - } - - if (!success) - { - LL_WARNS() << "can't read position key (" << k << ")" - << " for animation " << asset_id << LL_ENDL; return FALSE; } @@ -1685,7 +1719,7 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) if (is_pelvis) { - mJointMotionList->mPelvisBBox.addPoint(pos_key.mPosition); + joint_motion_list->mPelvisBBox.addPoint(pos_key.mPosition); } } @@ -1717,23 +1751,21 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) for(S32 i = 0; i < num_constraints; ++i) { // read in constraint data - JointConstraintSharedData* constraintp = new JointConstraintSharedData; + std::unique_ptr<JointConstraintSharedData> constraintp(new JointConstraintSharedData); U8 byte = 0; if (!dp.unpackU8(byte, "chain_length")) { LL_WARNS() << "can't read constraint chain length" << " for animation " << asset_id << LL_ENDL; - delete constraintp; return FALSE; } constraintp->mChainLength = (S32) byte; - if((U32)constraintp->mChainLength > mJointMotionList->getNumJointMotions()) + if((U32)constraintp->mChainLength > joint_motion_list->getNumJointMotions()) { LL_WARNS() << "invalid constraint chain length" << " for animation " << asset_id << LL_ENDL; - delete constraintp; return FALSE; } @@ -1741,7 +1773,6 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) { LL_WARNS() << "can't read constraint type" << " for animation " << asset_id << LL_ENDL; - delete constraintp; return FALSE; } @@ -1749,7 +1780,6 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) { LL_WARNS() << "invalid constraint type" << " for animation " << asset_id << LL_ENDL; - delete constraintp; return FALSE; } constraintp->mConstraintType = (EConstraintType)byte; @@ -1760,7 +1790,6 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) { LL_WARNS() << "can't read source volume name" << " for animation " << asset_id << LL_ENDL; - delete constraintp; return FALSE; } @@ -1771,7 +1800,6 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) { LL_WARNS() << "not a valid source constraint volume " << str << " for animation " << asset_id << LL_ENDL; - delete constraintp; return FALSE; } @@ -1779,7 +1807,6 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) { LL_WARNS() << "can't read constraint source offset" << " for animation " << asset_id << LL_ENDL; - delete constraintp; return FALSE; } @@ -1787,7 +1814,6 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) { LL_WARNS() << "non-finite constraint source offset" << " for animation " << asset_id << LL_ENDL; - delete constraintp; return FALSE; } @@ -1795,7 +1821,6 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) { LL_WARNS() << "can't read target volume name" << " for animation " << asset_id << LL_ENDL; - delete constraintp; return FALSE; } @@ -1814,7 +1839,6 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) { LL_WARNS() << "not a valid target constraint volume " << str << " for animation " << asset_id << LL_ENDL; - delete constraintp; return FALSE; } } @@ -1823,7 +1847,6 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) { LL_WARNS() << "can't read constraint target offset" << " for animation " << asset_id << LL_ENDL; - delete constraintp; return FALSE; } @@ -1831,7 +1854,6 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) { LL_WARNS() << "non-finite constraint target offset" << " for animation " << asset_id << LL_ENDL; - delete constraintp; return FALSE; } @@ -1839,7 +1861,6 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) { LL_WARNS() << "can't read constraint target direction" << " for animation " << asset_id << LL_ENDL; - delete constraintp; return FALSE; } @@ -1847,7 +1868,6 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) { LL_WARNS() << "non-finite constraint target direction" << " for animation " << asset_id << LL_ENDL; - delete constraintp; return FALSE; } @@ -1861,7 +1881,6 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) { LL_WARNS() << "can't read constraint ease in start time" << " for animation " << asset_id << LL_ENDL; - delete constraintp; return FALSE; } @@ -1869,7 +1888,6 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) { LL_WARNS() << "can't read constraint ease in stop time" << " for animation " << asset_id << LL_ENDL; - delete constraintp; return FALSE; } @@ -1877,7 +1895,6 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) { LL_WARNS() << "can't read constraint ease out start time" << " for animation " << asset_id << LL_ENDL; - delete constraintp; return FALSE; } @@ -1885,33 +1902,31 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) { LL_WARNS() << "can't read constraint ease out stop time" << " for animation " << asset_id << LL_ENDL; - delete constraintp; return FALSE; } - mJointMotionList->mConstraints.push_front(constraintp); - - constraintp->mJointStateIndices = new S32[constraintp->mChainLength + 1]; // note: mChainLength is size-limited - comes from a byte - LLJoint* joint = mCharacter->findCollisionVolume(constraintp->mSourceConstraintVolume); // get joint to which this collision volume is attached if (!joint) { return FALSE; } + + constraintp->mJointStateIndices = new S32[constraintp->mChainLength + 1]; // note: mChainLength is size-limited - comes from a byte + for (S32 i = 0; i < constraintp->mChainLength + 1; i++) { LLJoint* parent = joint->getParent(); if (!parent) { LL_WARNS() << "Joint with no parent: " << joint->getName() - << " Emote: " << mJointMotionList->mEmoteName + << " Emote: " << joint_motion_list->mEmoteName << " for animation " << asset_id << LL_ENDL; return FALSE; } joint = parent; constraintp->mJointStateIndices[i] = -1; - for (U32 j = 0; j < mJointMotionList->getNumJointMotions(); j++) + for (U32 j = 0; j < joint_motion_list->getNumJointMotions(); j++) { LLJoint* constraint_joint = getJoint(j); @@ -1932,14 +1947,16 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id) { LL_WARNS() << "No joint index for constraint " << i << " for animation " << asset_id << LL_ENDL; - delete constraintp; return FALSE; } } + + joint_motion_list->mConstraints.push_front(constraintp.release()); } } // *FIX: support cleanup of old keyframe data + mJointMotionList = joint_motion_list.release(); // release from unique_ptr to member; LLKeyframeDataCache::addKeyframeData(getID(), mJointMotionList); mAssetStatus = ASSET_LOADED; @@ -1991,10 +2008,9 @@ BOOL LLKeyframeMotion::serialize(LLDataPacker& dp) const success &= dp.packS32(joint_motionp->mRotationCurve.mNumKeys, "num_rot_keys"); LL_DEBUGS("BVH") << "Joint " << joint_motionp->mJointName << LL_ENDL; - for (RotationCurve::key_map_t::iterator iter = joint_motionp->mRotationCurve.mKeys.begin(); - iter != joint_motionp->mRotationCurve.mKeys.end(); ++iter) + for (RotationCurve::key_map_t::value_type& rot_pair : joint_motionp->mRotationCurve.mKeys) { - RotationKey& rot_key = iter->second; + RotationKey& rot_key = rot_pair.second; U16 time_short = F32_to_U16(rot_key.mTime, 0.f, mJointMotionList->mDuration); success &= dp.packU16(time_short, "time"); @@ -2013,10 +2029,9 @@ BOOL LLKeyframeMotion::serialize(LLDataPacker& dp) const } success &= dp.packS32(joint_motionp->mPositionCurve.mNumKeys, "num_pos_keys"); - for (PositionCurve::key_map_t::iterator iter = joint_motionp->mPositionCurve.mKeys.begin(); - iter != joint_motionp->mPositionCurve.mKeys.end(); ++iter) + for (PositionCurve::key_map_t::value_type& pos_pair : joint_motionp->mPositionCurve.mKeys) { - PositionKey& pos_key = iter->second; + PositionKey& pos_key = pos_pair.second; U16 time_short = F32_to_U16(pos_key.mTime, 0.f, mJointMotionList->mDuration); success &= dp.packU16(time_short, "time"); @@ -2035,10 +2050,8 @@ BOOL LLKeyframeMotion::serialize(LLDataPacker& dp) const success &= dp.packS32(mJointMotionList->mConstraints.size(), "num_constraints"); LL_DEBUGS("BVH") << "num_constraints " << mJointMotionList->mConstraints.size() << LL_ENDL; - for (JointMotionList::constraint_list_t::const_iterator iter = mJointMotionList->mConstraints.begin(); - iter != mJointMotionList->mConstraints.end(); ++iter) + for (JointConstraintSharedData* shared_constraintp : mJointMotionList->mConstraints) { - JointConstraintSharedData* shared_constraintp = *iter; success &= dp.packU8(shared_constraintp->mChainLength, "chain_length"); success &= dp.packU8(shared_constraintp->mConstraintType, "constraint_type"); char source_volume[16]; /* Flawfinder: ignore */ @@ -2096,8 +2109,9 @@ U32 LLKeyframeMotion::getFileSize() //----------------------------------------------------------------------------- // dumpToFile() //----------------------------------------------------------------------------- -void LLKeyframeMotion::dumpToFile(const std::string& name) +bool LLKeyframeMotion::dumpToFile(const std::string& name) { + bool succ = false; if (isLoaded()) { std::string outfile_base; @@ -2114,10 +2128,24 @@ void LLKeyframeMotion::dumpToFile(const std::string& name) const LLUUID& id = getID(); outfile_base = id.asString(); } - std::string outfilename = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,outfile_base + ".anim"); + + if (gDirUtilp->getExtension(outfile_base).empty()) + { + outfile_base += ".anim"; + } + std::string outfilename; + if (gDirUtilp->getDirName(outfile_base).empty()) + { + outfilename = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,outfile_base); + } + else + { + outfilename = outfile_base; + } if (LLFile::isfile(outfilename)) { - return; + LL_WARNS() << outfilename << " already exists, write failed" << LL_ENDL; + return false; } S32 file_size = getFileSize(); @@ -2131,11 +2159,13 @@ void LLKeyframeMotion::dumpToFile(const std::string& name) outfile.open(outfilename, LL_APR_WPB); if (outfile.getFileHandle()) { - outfile.write(buffer, file_size); + S32 wrote_bytes = outfile.write(buffer, file_size); + succ = (wrote_bytes == file_size); } } delete [] buffer; } + return succ; } //----------------------------------------------------------------------------- @@ -2373,14 +2403,13 @@ void LLKeyframeDataCache::dumpDiagInfo() LL_INFOS() << "-----------------------------------------------------" << LL_ENDL; // print each loaded mesh, and it's memory usage - for (keyframe_data_map_t::iterator map_it = sKeyframeDataMap.begin(); - map_it != sKeyframeDataMap.end(); ++map_it) + for (keyframe_data_map_t::value_type& data_pair : sKeyframeDataMap) { U32 joint_motion_kb; - LLKeyframeMotion::JointMotionList *motion_list_p = map_it->second; + LLKeyframeMotion::JointMotionList *motion_list_p = data_pair.second; - LL_INFOS() << "Motion: " << map_it->first << LL_ENDL; + LL_INFOS() << "Motion: " << data_pair.first << LL_ENDL; joint_motion_kb = motion_list_p->dumpDiagInfo(); diff --git a/indra/llcharacter/llkeyframemotion.h b/indra/llcharacter/llkeyframemotion.h index 9a927ede9a..96746f57c9 100644 --- a/indra/llcharacter/llkeyframemotion.h +++ b/indra/llcharacter/llkeyframemotion.h @@ -156,9 +156,9 @@ public: public: U32 getFileSize(); BOOL serialize(LLDataPacker& dp) const; - BOOL deserialize(LLDataPacker& dp, const LLUUID& asset_id); + BOOL deserialize(LLDataPacker& dp, const LLUUID& asset_id, bool allow_invalid_joints = true); BOOL isLoaded() { return mJointMotionList != NULL; } - void dumpToFile(const std::string& name); + bool dumpToFile(const std::string& name); // setters for modifying a keyframe animation @@ -432,6 +432,9 @@ protected: F32 mLastUpdateTime; F32 mLastLoopedTime; AssetStatus mAssetStatus; + +public: + void setCharacter(LLCharacter* character) { mCharacter = character; } }; class LLKeyframeDataCache diff --git a/indra/llcharacter/llkeyframemotionparam.cpp b/indra/llcharacter/llkeyframemotionparam.cpp index aba1c5db39..c80aabe294 100644 --- a/indra/llcharacter/llkeyframemotionparam.cpp +++ b/indra/llcharacter/llkeyframemotionparam.cpp @@ -64,13 +64,11 @@ LLKeyframeMotionParam::LLKeyframeMotionParam( const LLUUID &id) : LLMotion(id) //----------------------------------------------------------------------------- LLKeyframeMotionParam::~LLKeyframeMotionParam() { - for (motion_map_t::iterator iter = mParameterizedMotions.begin(); - iter != mParameterizedMotions.end(); ++iter) + for (motion_map_t::value_type& motion_pair : mParameterizedMotions) { - motion_list_t& motionList = iter->second; - for (motion_list_t::iterator iter2 = motionList.begin(); iter2 != motionList.end(); ++iter2) + motion_list_t& motionList = motion_pair.second; + for (const ParameterizedMotion& paramMotion : motionList) { - const ParameterizedMotion& paramMotion = *iter2; delete paramMotion.mMotion; } motionList.clear(); @@ -90,13 +88,11 @@ LLMotion::LLMotionInitStatus LLKeyframeMotionParam::onInitialize(LLCharacter *ch return STATUS_FAILURE; } - for (motion_map_t::iterator iter = mParameterizedMotions.begin(); - iter != mParameterizedMotions.end(); ++iter) + for (motion_map_t::value_type& motion_pair : mParameterizedMotions) { - motion_list_t& motionList = iter->second; - for (motion_list_t::iterator iter2 = motionList.begin(); iter2 != motionList.end(); ++iter2) + motion_list_t& motionList = motion_pair.second; + for (const ParameterizedMotion& paramMotion : motionList) { - const ParameterizedMotion& paramMotion = *iter2; LLMotion* motion = paramMotion.mMotion; motion->onInitialize(character); @@ -139,13 +135,11 @@ LLMotion::LLMotionInitStatus LLKeyframeMotionParam::onInitialize(LLCharacter *ch //----------------------------------------------------------------------------- BOOL LLKeyframeMotionParam::onActivate() { - for (motion_map_t::iterator iter = mParameterizedMotions.begin(); - iter != mParameterizedMotions.end(); ++iter) + for (motion_map_t::value_type& motion_pair : mParameterizedMotions) { - motion_list_t& motionList = iter->second; - for (motion_list_t::iterator iter2 = motionList.begin(); iter2 != motionList.end(); ++iter2) + motion_list_t& motionList = motion_pair.second; + for (const ParameterizedMotion& paramMotion : motionList) { - const ParameterizedMotion& paramMotion = *iter2; paramMotion.mMotion->activate(mActivationTimestamp); } } @@ -162,23 +156,20 @@ BOOL LLKeyframeMotionParam::onUpdate(F32 time, U8* joint_mask) F32 weightFactor = 1.f / (F32)mParameterizedMotions.size(); // zero out all pose weights - for (motion_map_t::iterator iter = mParameterizedMotions.begin(); - iter != mParameterizedMotions.end(); ++iter) + for (motion_map_t::value_type& motion_pair : mParameterizedMotions) { - motion_list_t& motionList = iter->second; - for (motion_list_t::iterator iter2 = motionList.begin(); iter2 != motionList.end(); ++iter2) + motion_list_t& motionList = motion_pair.second; + for (const ParameterizedMotion& paramMotion : motionList) { - const ParameterizedMotion& paramMotion = *iter2; // LL_INFOS() << "Weight for pose " << paramMotion.mMotion->getName() << " is " << paramMotion.mMotion->getPose()->getWeight() << LL_ENDL; paramMotion.mMotion->getPose()->setWeight(0.f); } } - for (motion_map_t::iterator iter = mParameterizedMotions.begin(); - iter != mParameterizedMotions.end(); ++iter) + for (motion_map_t::value_type& motion_pair : mParameterizedMotions) { - const std::string& paramName = iter->first; + const std::string& paramName = motion_pair.first; F32* paramValue = (F32 *)mCharacter->getAnimationData(paramName); if (NULL == paramValue) // unexpected, but... { @@ -190,10 +181,9 @@ BOOL LLKeyframeMotionParam::onUpdate(F32 time, U8* joint_mask) const ParameterizedMotion* firstMotion = NULL; const ParameterizedMotion* secondMotion = NULL; - motion_list_t& motionList = iter->second; - for (motion_list_t::iterator iter2 = motionList.begin(); iter2 != motionList.end(); ++iter2) + motion_list_t& motionList = motion_pair.second; + for (const ParameterizedMotion& paramMotion : motionList) { - const ParameterizedMotion& paramMotion = *iter2; paramMotion.mMotion->onUpdate(time, joint_mask); F32 distToParam = paramMotion.mParam - *paramValue; @@ -280,13 +270,11 @@ BOOL LLKeyframeMotionParam::onUpdate(F32 time, U8* joint_mask) //----------------------------------------------------------------------------- void LLKeyframeMotionParam::onDeactivate() { - for (motion_map_t::iterator iter = mParameterizedMotions.begin(); - iter != mParameterizedMotions.end(); ++iter) + for (motion_map_t::value_type& motion_pair : mParameterizedMotions) { - motion_list_t& motionList = iter->second; - for (motion_list_t::iterator iter2 = motionList.begin(); iter2 != motionList.end(); ++iter2) + motion_list_t& motionList = motion_pair.second; + for (const ParameterizedMotion& paramMotion : motionList) { - const ParameterizedMotion& paramMotion = *iter2; paramMotion.mMotion->onDeactivate(); } } @@ -318,13 +306,11 @@ BOOL LLKeyframeMotionParam::addKeyframeMotion(char *name, const LLUUID &id, char //----------------------------------------------------------------------------- void LLKeyframeMotionParam::setDefaultKeyframeMotion(char *name) { - for (motion_map_t::iterator iter = mParameterizedMotions.begin(); - iter != mParameterizedMotions.end(); ++iter) + for (motion_map_t::value_type& motion_pair : mParameterizedMotions) { - motion_list_t& motionList = iter->second; - for (motion_list_t::iterator iter2 = motionList.begin(); iter2 != motionList.end(); ++iter2) + motion_list_t& motionList = motion_pair.second; + for (const ParameterizedMotion& paramMotion : motionList) { - const ParameterizedMotion& paramMotion = *iter2; if (paramMotion.mMotion->getName() == name) { mDefaultKeyframeMotion = paramMotion.mMotion; diff --git a/indra/llcharacter/llmotioncontroller.cpp b/indra/llcharacter/llmotioncontroller.cpp index e66714388a..96e0d5e8d7 100644 --- a/indra/llcharacter/llmotioncontroller.cpp +++ b/indra/llcharacter/llmotioncontroller.cpp @@ -211,11 +211,8 @@ void LLMotionController::purgeExcessMotions() { // too many motions active this frame, kill all blenders mPoseBlender.clearBlenders(); - for (motion_set_t::iterator loaded_motion_it = mLoadedMotions.begin(); - loaded_motion_it != mLoadedMotions.end(); - ++loaded_motion_it) + for (LLMotion* cur_motionp : mLoadedMotions) { - LLMotion* cur_motionp = *loaded_motion_it; // motion isn't playing, delete it if (!isMotionActive(cur_motionp)) { @@ -225,13 +222,10 @@ void LLMotionController::purgeExcessMotions() } // clean up all inactive, loaded motions - for (std::set<LLUUID>::iterator motion_it = motions_to_kill.begin(); - motion_it != motions_to_kill.end(); - ++motion_it) + for (LLUUID motion_id : motions_to_kill) { // look up the motion again by ID to get canonical instance // and kill it only if that one is inactive - LLUUID motion_id = *motion_it; LLMotion* motionp = findMotion(motion_id); if (motionp && !isMotionActive(motionp)) { @@ -1059,12 +1053,11 @@ LLMotion* LLMotionController::findMotion(const LLUUID& id) const void LLMotionController::dumpMotions() { LL_INFOS() << "=====================================" << LL_ENDL; - for (motion_map_t::iterator iter = mAllMotions.begin(); - iter != mAllMotions.end(); iter++) + for (motion_map_t::value_type& motion_pair : mAllMotions) { - LLUUID id = iter->first; + LLUUID id = motion_pair.first; std::string state_string; - LLMotion *motion = iter->second; + LLMotion *motion = motion_pair.second; if (mLoadingMotions.find(motion) != mLoadingMotions.end()) state_string += std::string("l"); if (mLoadedMotions.find(motion) != mLoadedMotions.end()) @@ -1083,10 +1076,9 @@ void LLMotionController::dumpMotions() //----------------------------------------------------------------------------- void LLMotionController::deactivateAllMotions() { - for (motion_map_t::iterator iter = mAllMotions.begin(); - iter != mAllMotions.end(); iter++) + for (motion_map_t::value_type& motion_pair : mAllMotions) { - LLMotion* motionp = iter->second; + LLMotion* motionp = motion_pair.second; deactivateMotionInstance(motionp); } } @@ -1118,10 +1110,9 @@ void LLMotionController::flushAllMotions() mCharacter->removeAnimationData("Hand Pose"); // restart motions - for (std::vector<std::pair<LLUUID,F32> >::iterator iter = active_motions.begin(); - iter != active_motions.end(); ++iter) + for (std::vector<std::pair<LLUUID,F32> >::value_type& motion_pair : active_motions) { - startMotion(iter->first, iter->second); + startMotion(motion_pair.first, motion_pair.second); } } diff --git a/indra/llcharacter/llmultigesture.cpp b/indra/llcharacter/llmultigesture.cpp index 2045739c7f..7ed242f90a 100644 --- a/indra/llcharacter/llmultigesture.cpp +++ b/indra/llcharacter/llmultigesture.cpp @@ -88,10 +88,8 @@ S32 LLMultiGesture::getMaxSerialSize() const max_size += 64; // step count S32 - std::vector<LLGestureStep*>::const_iterator it; - for (it = mSteps.begin(); it != mSteps.end(); ++it) + for (LLGestureStep* step : mSteps) { - LLGestureStep* step = *it; max_size += 64; // type S32 max_size += step->getMaxSerialSize(); } diff --git a/indra/llcharacter/llpose.cpp b/indra/llcharacter/llpose.cpp index fc95fafd61..6f41a0e747 100644 --- a/indra/llcharacter/llpose.cpp +++ b/indra/llcharacter/llpose.cpp @@ -148,11 +148,9 @@ LLJointState* LLPose::findJointState(const std::string &name) void LLPose::setWeight(F32 weight) { joint_map_iterator iter; - for(iter = mJointMap.begin(); - iter != mJointMap.end(); - ++iter) + for (joint_map_value_type& joint_pair : mJointMap) { - iter->second->setWeight(weight); + joint_pair.second->setWeight(weight); } mWeight = weight; } diff --git a/indra/llcharacter/llstatemachine.cpp b/indra/llcharacter/llstatemachine.cpp index b917db3117..2e8214ffaf 100644 --- a/indra/llcharacter/llstatemachine.cpp +++ b/indra/llcharacter/llstatemachine.cpp @@ -169,10 +169,9 @@ void LLStateDiagram::setDefaultState(LLFSMState& default_state) S32 LLStateDiagram::numDeadendStates() { S32 numDeadends = 0; - StateMap::iterator state_it; - for(state_it = mStates.begin(); state_it != mStates.end(); ++state_it) + for (StateMap::value_type& state_pair : mStates) { - if (state_it->second.size() == 0) + if (state_pair.second.size() == 0) { numDeadends++; } @@ -191,12 +190,11 @@ BOOL LLStateDiagram::stateIsValid(LLFSMState& state) LLFSMState* LLStateDiagram::getState(U32 state_id) { - StateMap::iterator state_it; - for(state_it = mStates.begin(); state_it != mStates.end(); ++state_it) + for (StateMap::value_type& state_pair : mStates) { - if (state_it->first->getID() == state_id) + if (state_pair.first->getID() == state_id) { - return state_it->first; + return state_pair.first; } } return NULL; @@ -215,18 +213,16 @@ BOOL LLStateDiagram::saveDotFile(const std::string& filename) } apr_file_printf(dot_file, "digraph StateMachine {\n\tsize=\"100,100\";\n\tfontsize=40;\n\tlabel=\"Finite State Machine\";\n\torientation=landscape\n\tratio=.77\n"); - StateMap::iterator state_it; - for(state_it = mStates.begin(); state_it != mStates.end(); ++state_it) + for (StateMap::value_type& state_pair : mStates) { - apr_file_printf(dot_file, "\t\"%s\" [fontsize=28,shape=box]\n", state_it->first->getName().c_str()); + apr_file_printf(dot_file, "\t\"%s\" [fontsize=28,shape=box]\n", state_pair.first->getName().c_str()); } apr_file_printf(dot_file, "\t\"All States\" [fontsize=30,style=bold,shape=box]\n"); - Transitions::iterator transitions_it; - for(transitions_it = mDefaultTransitions.begin(); transitions_it != mDefaultTransitions.end(); ++transitions_it) + for (Transitions::value_type& transition_pair : mDefaultTransitions) { - apr_file_printf(dot_file, "\t\"All States\" -> \"%s\" [label = \"%s\",fontsize=24];\n", transitions_it->second->getName().c_str(), - transitions_it->second->getName().c_str()); + apr_file_printf(dot_file, "\t\"All States\" -> \"%s\" [label = \"%s\",fontsize=24];\n", transition_pair.second->getName().c_str(), + transition_pair.second->getName().c_str()); } if (mDefaultState) @@ -235,18 +231,15 @@ BOOL LLStateDiagram::saveDotFile(const std::string& filename) } - for(state_it = mStates.begin(); state_it != mStates.end(); ++state_it) + for (StateMap::value_type& state_pair : mStates) { - LLFSMState *state = state_it->first; + LLFSMState *state = state_pair.first; - Transitions::iterator transitions_it; - for(transitions_it = state_it->second.begin(); - transitions_it != state_it->second.end(); - ++transitions_it) + for (Transitions::value_type& transition_pair : state_pair.second) { std::string state_name = state->getName(); - std::string target_name = transitions_it->second->getName(); - std::string transition_name = transitions_it->first->getName(); + std::string target_name = transition_pair.second->getName(); + std::string transition_name = transition_pair.first->getName(); apr_file_printf(dot_file, "\t\"%s\" -> \"%s\" [label = \"%s\",fontsize=24];\n", state->getName().c_str(), target_name.c_str(), transition_name.c_str()); @@ -265,25 +258,18 @@ std::ostream& operator<<(std::ostream &s, LLStateDiagram &FSM) s << "Default State: " << FSM.mDefaultState->getName() << "\n"; } - LLStateDiagram::Transitions::iterator transitions_it; - for(transitions_it = FSM.mDefaultTransitions.begin(); - transitions_it != FSM.mDefaultTransitions.end(); - ++transitions_it) + for (LLStateDiagram::Transitions::value_type& transition_pair : FSM.mDefaultTransitions) { - s << "Any State -- " << transitions_it->first->getName() - << " --> " << transitions_it->second->getName() << "\n"; + s << "Any State -- " << transition_pair.first->getName() + << " --> " << transition_pair.second->getName() << "\n"; } - LLStateDiagram::StateMap::iterator state_it; - for(state_it = FSM.mStates.begin(); state_it != FSM.mStates.end(); ++state_it) + for (LLStateDiagram::StateMap::value_type& state_pair : FSM.mStates) { - LLStateDiagram::Transitions::iterator transitions_it; - for(transitions_it = state_it->second.begin(); - transitions_it != state_it->second.end(); - ++transitions_it) + for (LLStateDiagram::Transitions::value_type& transition_pair : state_pair.second) { - s << state_it->first->getName() << " -- " << transitions_it->first->getName() - << " --> " << transitions_it->second->getName() << "\n"; + s << state_pair.first->getName() << " -- " << transition_pair.first->getName() + << " --> " << transition_pair.second->getName() << "\n"; } s << "\n"; } |