diff --git a/indra/newview/fsfloaterposer.cpp b/indra/newview/fsfloaterposer.cpp index 321250bdc7..df22447565 100644 --- a/indra/newview/fsfloaterposer.cpp +++ b/indra/newview/fsfloaterposer.cpp @@ -599,6 +599,10 @@ void FSFloaterPoser::onPoseMenuAction(const LLSD& param) loadType = POSITIONS_AND_SCALES; else if (loadStyle == "all") loadType = ROT_POS_AND_SCALES; + else if (loadStyle == "selective") + loadType = SELECTIVE; + else if (loadStyle == "selective_rot") + loadType = SELECTIVE_ROT; LLVOAvatar* avatar = getUiSelectedAvatar(); if (!avatar) @@ -753,11 +757,12 @@ void FSFloaterPoser::loadPoseFromXml(LLVOAvatar* avatar, const std::string& pose gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, POSE_SAVE_SUBDIRECTORY, poseFileName + POSE_INTERNAL_FORMAT_FILE_EXT); bool loadRotations = loadMethod == ROTATIONS || loadMethod == ROTATIONS_AND_POSITIONS || loadMethod == ROTATIONS_AND_SCALES || - loadMethod == ROT_POS_AND_SCALES; + loadMethod == ROT_POS_AND_SCALES || loadMethod == SELECTIVE || loadMethod == SELECTIVE_ROT; bool loadPositions = loadMethod == POSITIONS || loadMethod == ROTATIONS_AND_POSITIONS || loadMethod == POSITIONS_AND_SCALES || - loadMethod == ROT_POS_AND_SCALES; + loadMethod == ROT_POS_AND_SCALES || loadMethod == SELECTIVE; bool loadScales = loadMethod == SCALES || loadMethod == POSITIONS_AND_SCALES || loadMethod == ROTATIONS_AND_SCALES || - loadMethod == ROT_POS_AND_SCALES; + loadMethod == ROT_POS_AND_SCALES || loadMethod == SELECTIVE; + bool loadSelective = loadMethod == SELECTIVE || loadMethod == SELECTIVE_ROT; try { @@ -808,10 +813,13 @@ void FSFloaterPoser::loadPoseFromXml(LLVOAvatar* avatar, const std::string& pose if (!poserJoint) continue; + if (loadSelective && mPoserAnimator.isPosingAvatarJoint(avatar, *poserJoint)) + continue; + if (control_map.has("enabled")) { enabled = control_map["enabled"].asBoolean(); - mPoserAnimator.setPosingAvatarJoint(avatar, *poserJoint, enabled); + mPoserAnimator.setPosingAvatarJoint(avatar, *poserJoint, enabled || loadSelective); } if (control_map.has("jointBaseRotationIsZero")) diff --git a/indra/newview/fsfloaterposer.h b/indra/newview/fsfloaterposer.h index 090419cf3e..b320d9fee6 100644 --- a/indra/newview/fsfloaterposer.h +++ b/indra/newview/fsfloaterposer.h @@ -54,6 +54,8 @@ typedef enum E_LoadPoseMethods HAND_RIGHT = 8, HAND_LEFT = 9, FACE_ONLY = 10, + SELECTIVE = 11, + SELECTIVE_ROT = 12, } E_LoadPoseMethods; /// diff --git a/indra/newview/skins/default/xui/en/floater_fs_poser.xml b/indra/newview/skins/default/xui/en/floater_fs_poser.xml index 4d9e3311ca..6006628827 100644 --- a/indra/newview/skins/default/xui/en/floater_fs_poser.xml +++ b/indra/newview/skins/default/xui/en/floater_fs_poser.xml @@ -1158,7 +1158,7 @@ width="403"> name="button_RecaptureParts" left_pad="1" top_delta="0" - tool_tip="If the selected body part(s) is/are OFF, this Recaptures what those body parts are doing right now. This button disables if you start from a T-Pose" + tool_tip="If the selected body part(s) is/are OFF, this Recaptures what those body parts are doing right now." width="45" > diff --git a/indra/newview/skins/default/xui/en/menu_fs_poser_poses_btn.xml b/indra/newview/skins/default/xui/en/menu_fs_poser_poses_btn.xml index f1662ff934..a44b02e9eb 100644 --- a/indra/newview/skins/default/xui/en/menu_fs_poser_poses_btn.xml +++ b/indra/newview/skins/default/xui/en/menu_fs_poser_poses_btn.xml @@ -3,48 +3,34 @@ layout="topleft" name="Settings"> - - - - - - - + - - - - + name="rotations_positions"> +