//----------------------------------------------------------------------------- // LLEyeMotion::onInitialize(LLCharacter *character) //----------------------------------------------------------------------------- LLMotion::LLMotionInitStatus LLEyeMotion::onInitialize(LLCharacter *character) { mCharacter = character; mHeadJoint = character->getJoint("mHead"); if ( ! mHeadJoint ) { llinfos << getName() << ": Can't get head joint." << llendl; return STATUS_FAILURE; } mLeftEyeState->setJoint( character->getJoint("mEyeLeft") ); if ( ! mLeftEyeState->getJoint() ) { llinfos << getName() << ": Can't get left eyeball joint." << llendl; return STATUS_FAILURE; } mRightEyeState->setJoint( character->getJoint("mEyeRight") ); if ( ! mRightEyeState->getJoint() ) { llinfos << getName() << ": Can't get Right eyeball joint." << llendl; return STATUS_FAILURE; } mLeftEyeState->setUsage(LLJointState::ROT); mRightEyeState->setUsage(LLJointState::ROT); addJointState( mLeftEyeState ); addJointState( mRightEyeState ); return STATUS_SUCCESS; }
//----------------------------------------------------------------------------- // LLEditingMotion::onInitialize(LLCharacter *character) //----------------------------------------------------------------------------- LLMotion::LLMotionInitStatus LLEditingMotion::onInitialize(LLCharacter *character) { // save character for future use mCharacter = character; // make sure character skeleton is copacetic if (!mCharacter->getJoint("mShoulderLeft") || !mCharacter->getJoint("mElbowLeft") || !mCharacter->getJoint("mWristLeft")) { LL_WARNS() << "Invalid skeleton for editing motion!" << LL_ENDL; return STATUS_FAILURE; } // get the shoulder, elbow, wrist joints from the character mParentState->setJoint( mCharacter->getJoint("mShoulderLeft")->getParent() ); mShoulderState->setJoint( mCharacter->getJoint("mShoulderLeft") ); mElbowState->setJoint( mCharacter->getJoint("mElbowLeft") ); mWristState->setJoint( mCharacter->getJoint("mWristLeft") ); mTorsoState->setJoint( mCharacter->getJoint("mTorso")); if ( ! mParentState->getJoint() ) { LL_INFOS() << getName() << ": Can't get parent joint." << LL_ENDL; return STATUS_FAILURE; } mWristOffset = LLVector3(0.0f, 0.2f, 0.0f); // add joint states to the pose mShoulderState->setUsage(LLJointState::ROT); mElbowState->setUsage(LLJointState::ROT); mTorsoState->setUsage(LLJointState::ROT); mWristState->setUsage(LLJointState::ROT); addJointState( mShoulderState ); addJointState( mElbowState ); addJointState( mTorsoState ); addJointState( mWristState ); // propagate joint positions to kinematic chain mParentJoint.setPosition( mParentState->getJoint()->getWorldPosition() ); mShoulderJoint.setPosition( mShoulderState->getJoint()->getPosition() ); mElbowJoint.setPosition( mElbowState->getJoint()->getPosition() ); mWristJoint.setPosition( mWristState->getJoint()->getPosition() + mWristOffset ); // propagate current joint rotations to kinematic chain mParentJoint.setRotation( mParentState->getJoint()->getWorldRotation() ); mShoulderJoint.setRotation( mShoulderState->getJoint()->getRotation() ); mElbowJoint.setRotation( mElbowState->getJoint()->getRotation() ); // connect the ikSolver to the chain mIKSolver.setPoleVector( LLVector3( -1.0f, 1.0f, 0.0f ) ); // specifying the elbow's axis will prevent bad IK for the more // singular configurations, but the axis is limb-specific -- Leviathan mIKSolver.setBAxis( LLVector3( -0.682683f, 0.0f, -0.730714f ) ); mIKSolver.setupJoints( &mShoulderJoint, &mElbowJoint, &mWristJoint, &mTarget ); return STATUS_SUCCESS; }
LLMotion::LLMotionInitStatus LLBreastMotion::onInitialize(LLCharacter *character) { mCharacter = character; if (!mChestState->setJoint(character->getJoint("mChest"))) { return STATUS_FAILURE; } mChestState->setUsage(LLJointState::ROT); addJointState( mChestState ); for (U32 i=0; i < N_PARAMS; i++) { mBreastParamsUser[i] = NULL; mBreastParamsDriven[i] = NULL; mBreastParamsMin[i] = 0; mBreastParamsMax[i] = 0; if (breast_param_names_user[i] != "" && breast_param_names_driven[i] != "") { mBreastParamsUser[i] = (LLViewerVisualParam*)mCharacter->getVisualParam(breast_param_names_user[i].c_str()); mBreastParamsDriven[i] = (LLViewerVisualParam*)mCharacter->getVisualParam(breast_param_names_driven[i].c_str()); if (mBreastParamsDriven[i]) { mBreastParamsMin[i] = mBreastParamsDriven[i]->getMinWeight(); mBreastParamsMax[i] = mBreastParamsDriven[i]->getMaxWeight(); } } } mTimer.reset(); return STATUS_SUCCESS; }
//----------------------------------------------------------------------------- // LLTargetingMotion::onInitialize(LLCharacter *character) //----------------------------------------------------------------------------- LLMotion::LLMotionInitStatus LLTargetingMotion::onInitialize(LLCharacter *character) { // save character for future use mCharacter = character; mPelvisJoint = mCharacter->getJoint("mPelvis"); mTorsoJoint = mCharacter->getJoint("mTorso"); mRightHandJoint = mCharacter->getJoint("mWristRight"); // make sure character skeleton is copacetic if (!mPelvisJoint || !mTorsoJoint || !mRightHandJoint) { llwarns << "Invalid skeleton for targeting motion!" << llendl; return STATUS_FAILURE; } mTorsoState->setJoint( mTorsoJoint ); // add joint states to the pose mTorsoState->setUsage(LLJointState::ROT); addJointState( mTorsoState ); return STATUS_SUCCESS; }
//----------------------------------------------------------------------------- // LLFlyAdjustMotion::onInitialize() //----------------------------------------------------------------------------- LLMotion::LLMotionInitStatus LLFlyAdjustMotion::onInitialize(LLCharacter *character) { mCharacter = character; LLJoint* pelvisJoint = mCharacter->getJoint("mPelvis"); mPelvisState->setJoint( pelvisJoint ); if ( !pelvisJoint ) { llwarns << getName() << ": Can't get pelvis joint." << llendl; return STATUS_FAILURE; } mPelvisState->setUsage(LLJointState::POS | LLJointState::ROT); addJointState( mPelvisState ); return STATUS_SUCCESS; }
//----------------------------------------------------------------------------- // LLWalkAdjustMotion::onInitialize() //----------------------------------------------------------------------------- LLMotion::LLMotionInitStatus LLWalkAdjustMotion::onInitialize(LLCharacter *character) { mCharacter = character; mLeftAnkleJoint = mCharacter->getJoint("mAnkleLeft"); mRightAnkleJoint = mCharacter->getJoint("mAnkleRight"); mPelvisJoint = mCharacter->getJoint("mPelvis"); mPelvisState->setJoint( mPelvisJoint ); if ( !mPelvisJoint ) { llwarns << getName() << ": Can't get pelvis joint." << llendl; return STATUS_FAILURE; } mPelvisState->setUsage(LLJointState::POS); addJointState( mPelvisState ); return STATUS_SUCCESS; }
void LLPhysicsMotionController::addMotion(LLPhysicsMotion *motion) { addJointState(motion->getJointState()); mMotions.push_back(motion); }
//----------------------------------------------------------------------------- // LLHeadRotMotion::onInitialize(LLCharacter *character) //----------------------------------------------------------------------------- LLMotion::LLMotionInitStatus LLHeadRotMotion::onInitialize(LLCharacter *character) { if (!character) return STATUS_FAILURE; mCharacter = character; mPelvisJoint = character->getJoint("mPelvis"); if ( ! mPelvisJoint ) { llinfos << getName() << ": Can't get pelvis joint." << llendl; return STATUS_FAILURE; } mRootJoint = character->getJoint("mRoot"); if ( ! mRootJoint ) { llinfos << getName() << ": Can't get root joint." << llendl; return STATUS_FAILURE; } mTorsoJoint = character->getJoint("mTorso"); if ( ! mTorsoJoint ) { llinfos << getName() << ": Can't get torso joint." << llendl; return STATUS_FAILURE; } mHeadJoint = character->getJoint("mHead"); if ( ! mHeadJoint ) { llinfos << getName() << ": Can't get head joint." << llendl; return STATUS_FAILURE; } mTorsoState->setJoint( character->getJoint("mTorso") ); if ( ! mTorsoState->getJoint() ) { llinfos << getName() << ": Can't get torso joint." << llendl; return STATUS_FAILURE; } mNeckState->setJoint( character->getJoint("mNeck") ); if ( ! mNeckState->getJoint() ) { llinfos << getName() << ": Can't get neck joint." << llendl; return STATUS_FAILURE; } mHeadState->setJoint( character->getJoint("mHead") ); if ( ! mHeadState->getJoint() ) { llinfos << getName() << ": Can't get head joint." << llendl; return STATUS_FAILURE; } mTorsoState->setUsage(LLJointState::ROT); mNeckState->setUsage(LLJointState::ROT); mHeadState->setUsage(LLJointState::ROT); addJointState( mTorsoState ); addJointState( mNeckState ); addJointState( mHeadState ); mLastHeadRot.loadIdentity(); return STATUS_SUCCESS; }