diff options
Diffstat (limited to 'indra/llcharacter')
| -rw-r--r-- | indra/llcharacter/CMakeLists.txt | 13 | ||||
| -rw-r--r-- | indra/llcharacter/llcharacter.cpp | 2 | ||||
| -rw-r--r-- | indra/llcharacter/llcharacter.h | 9 | ||||
| -rw-r--r-- | indra/llcharacter/lljoint.cpp | 30 | ||||
| -rw-r--r-- | indra/llcharacter/lljoint.h | 8 | ||||
| -rw-r--r-- | indra/llcharacter/llvisualparam.cpp | 33 | ||||
| -rw-r--r-- | indra/llcharacter/llvisualparam.h | 14 | ||||
| -rw-r--r-- | indra/llcharacter/tests/lljoint_test.cpp | 6 | 
8 files changed, 91 insertions, 24 deletions
| diff --git a/indra/llcharacter/CMakeLists.txt b/indra/llcharacter/CMakeLists.txt index a1712699eb..2573417b26 100644 --- a/indra/llcharacter/CMakeLists.txt +++ b/indra/llcharacter/CMakeLists.txt @@ -16,6 +16,10 @@ include_directories(      ${LLVFS_INCLUDE_DIRS}      ${LLXML_INCLUDE_DIRS}      ) +include_directories(SYSTEM +    ${LLCOMMON_SYSTEM_INCLUDE_DIRS} +    ${LLXML_SYSTEM_INCLUDE_DIRS} +    )  set(llcharacter_SOURCE_FILES      llanimationstates.cpp @@ -76,6 +80,15 @@ list(APPEND llcharacter_SOURCE_FILES ${llcharacter_HEADER_FILES})  add_library (llcharacter ${llcharacter_SOURCE_FILES}) +target_link_libraries( +    llcharacter +    ${LLCOMMON_LIBRARIES} +    ${LLMATH_LIBRARIES} +    ${LLMESSAGE_LIBRARIES} +    ${LLVFS_LIBRARIES} +    ${LLXML_LIBRARIES} +    ) +  # Add tests  if (LL_TESTS) diff --git a/indra/llcharacter/llcharacter.cpp b/indra/llcharacter/llcharacter.cpp index 0a6a8f9fa6..85cf1cd3f5 100644 --- a/indra/llcharacter/llcharacter.cpp +++ b/indra/llcharacter/llcharacter.cpp @@ -286,7 +286,7 @@ void LLCharacter::removeAnimationData(std::string name)  //-----------------------------------------------------------------------------  // setVisualParamWeight()  //----------------------------------------------------------------------------- -BOOL LLCharacter::setVisualParamWeight(LLVisualParam* which_param, F32 weight, BOOL upload_bake) +BOOL LLCharacter::setVisualParamWeight(const LLVisualParam* which_param, F32 weight, BOOL upload_bake)  {  	S32 index = which_param->getID();  	visual_param_index_map_t::iterator index_iter = mVisualParamIndexMap.find(index); diff --git a/indra/llcharacter/llcharacter.h b/indra/llcharacter/llcharacter.h index 3ebb2bffb0..5740dbce77 100644 --- a/indra/llcharacter/llcharacter.h +++ b/indra/llcharacter/llcharacter.h @@ -93,13 +93,6 @@ public:  	// get the height & normal of the ground under a point  	virtual void getGround(const LLVector3 &inPos, LLVector3 &outPos, LLVector3 &outNorm) = 0; -	// allocate an array of joints for the character skeleton -	// this must be overloaded to support joint subclasses, -	// and is called implicitly from buildSkeleton(). -	// Note this must handle reallocation as it will be called -	// each time buildSkeleton() is called. -	virtual BOOL allocateCharacterJoints( U32 num ) = 0; -  	// skeleton joint accessor to support joint subclasses  	virtual LLJoint *getCharacterJoint( U32 i ) = 0; @@ -197,7 +190,7 @@ public:  	void addVisualParam(LLVisualParam *param);  	void addSharedVisualParam(LLVisualParam *param); -	virtual BOOL setVisualParamWeight(LLVisualParam *which_param, F32 weight, BOOL upload_bake = FALSE ); +	virtual BOOL setVisualParamWeight(const LLVisualParam *which_param, F32 weight, BOOL upload_bake = FALSE );  	virtual BOOL setVisualParamWeight(const char* param_name, F32 weight, BOOL upload_bake = FALSE );  	virtual BOOL setVisualParamWeight(S32 index, F32 weight, BOOL upload_bake = FALSE ); diff --git a/indra/llcharacter/lljoint.cpp b/indra/llcharacter/lljoint.cpp index 19907933cb..09a7c11a22 100644 --- a/indra/llcharacter/lljoint.cpp +++ b/indra/llcharacter/lljoint.cpp @@ -40,7 +40,9 @@ S32 LLJoint::sNumTouches = 0;  // LLJoint()  // Class Constructor  //----------------------------------------------------------------------------- -LLJoint::LLJoint() + + +void LLJoint::init()  {  	mName = "unnamed";  	mParent = NULL; @@ -48,7 +50,20 @@ LLJoint::LLJoint()  	mXform.setScale(LLVector3(1.0f, 1.0f, 1.0f));  	mDirtyFlags = MATRIX_DIRTY | ROTATION_DIRTY | POSITION_DIRTY;  	mUpdateXform = TRUE; -	mJointNum = -1; +} + +LLJoint::LLJoint() : +	mJointNum(-1) +{ +	init(); +	touch(); +	mResetAfterRestoreOldXform = false; +} + +LLJoint::LLJoint(S32 joint_num) : +	mJointNum(joint_num) +{ +	init();  	touch();  	mResetAfterRestoreOldXform = false;  } @@ -58,15 +73,12 @@ LLJoint::LLJoint()  // LLJoint()  // Class Constructor  //----------------------------------------------------------------------------- -LLJoint::LLJoint(const std::string &name, LLJoint *parent) +LLJoint::LLJoint(const std::string &name, LLJoint *parent) : +	mJointNum(0)  { -	mName = "unnamed"; -	mParent = NULL; -	mXform.setScaleChildOffset(TRUE); -	mXform.setScale(LLVector3(1.0f, 1.0f, 1.0f)); -	mDirtyFlags = MATRIX_DIRTY | ROTATION_DIRTY | POSITION_DIRTY; +	init();  	mUpdateXform = FALSE; -	mJointNum = 0; +	// *TODO: mResetAfterRestoreOldXform is not initialized!!!  	setName(name);  	if (parent) diff --git a/indra/llcharacter/lljoint.h b/indra/llcharacter/lljoint.h index dc3c58cf64..2b1e2005c6 100644 --- a/indra/llcharacter/lljoint.h +++ b/indra/llcharacter/lljoint.h @@ -105,10 +105,15 @@ public:  public:  	LLJoint(); +	LLJoint(S32 joint_num); +	// *TODO: Only used for LLVOAvatarSelf::mScreenp.  *DOES NOT INITIALIZE mResetAfterRestoreOldXform*  	LLJoint( const std::string &name, LLJoint *parent=NULL ); -  	virtual ~LLJoint(); +private: +	void init(); + +public:  	// set name and parent  	void setup( const std::string &name, LLJoint *parent=NULL ); @@ -178,7 +183,6 @@ public:  	virtual BOOL isAnimatable() const { return TRUE; }  	S32 getJointNum() const { return mJointNum; } -	void setJointNum(S32 joint_num) { mJointNum = joint_num; }  	void restoreOldXform( void );  	void restoreToDefaultXform( void ); diff --git a/indra/llcharacter/llvisualparam.cpp b/indra/llcharacter/llvisualparam.cpp index 809b312abe..f7cb0f76b7 100644 --- a/indra/llcharacter/llvisualparam.cpp +++ b/indra/llcharacter/llvisualparam.cpp @@ -168,7 +168,8 @@ LLVisualParam::LLVisualParam()  	mIsAnimating( FALSE ),  	mID( -1 ),  	mInfo( 0 ), -	mIsDummy(FALSE) +	mIsDummy(FALSE), +	mParamLocation(LOC_UNKNOWN)  {  } @@ -250,6 +251,7 @@ void LLVisualParam::setAnimationTarget(F32 target_value, BOOL upload_bake)  	if (mIsDummy)  	{  		setWeight(target_value, upload_bake); +		mTargetWeight = mCurWeight;  		return;  	} @@ -319,3 +321,32 @@ void LLVisualParam::resetDrivenParams()  	// nothing to do for non-driver parameters  	return;  } + +const std::string param_location_name(const EParamLocation& loc) +{ +	switch (loc) +	{ +		case LOC_UNKNOWN: return "unknown"; +		case LOC_AV_SELF: return "self"; +		case LOC_AV_OTHER: return "other"; +		case LOC_WEARABLE: return "wearable"; +		default: return "error"; +	} +} + +void LLVisualParam::setParamLocation(EParamLocation loc) +{ +	if (mParamLocation == LOC_UNKNOWN || loc == LOC_UNKNOWN) +	{ +		mParamLocation = loc; +	} +	else if (mParamLocation == loc) +	{ +		// no action +	} +	else +	{ +		lldebugs << "param location is already " << mParamLocation << ", not slamming to " << loc << llendl; +	} +} + diff --git a/indra/llcharacter/llvisualparam.h b/indra/llcharacter/llvisualparam.h index 281fb14781..60ea7a369a 100644 --- a/indra/llcharacter/llvisualparam.h +++ b/indra/llcharacter/llvisualparam.h @@ -50,6 +50,16 @@ enum EVisualParamGroup  	NUM_VISUAL_PARAM_GROUPS  }; +enum EParamLocation +{ +	LOC_UNKNOWN, +	LOC_AV_SELF, +	LOC_AV_OTHER, +	LOC_WEARABLE +}; + +const std::string param_location_name(const EParamLocation& loc); +  const S32 MAX_TRANSMITTED_VISUAL_PARAMS = 255;  //----------------------------------------------------------------------------- @@ -150,6 +160,9 @@ public:  	void					setIsDummy(BOOL is_dummy) { mIsDummy = is_dummy; } +	void					setParamLocation(EParamLocation loc); +	EParamLocation			getParamLocation() const { return mParamLocation; } +  protected:  	F32					mCurWeight;			// current weight  	F32					mLastWeight;		// last weight @@ -161,6 +174,7 @@ protected:  	S32					mID;				// id for storing weight/morphtarget compares compactly  	LLVisualParamInfo	*mInfo; +	EParamLocation		mParamLocation;		// where does this visual param live?  } LL_ALIGN_POSTFIX(16);  #endif // LL_LLVisualParam_H diff --git a/indra/llcharacter/tests/lljoint_test.cpp b/indra/llcharacter/tests/lljoint_test.cpp index e92aa832d6..da151808f2 100644 --- a/indra/llcharacter/tests/lljoint_test.cpp +++ b/indra/llcharacter/tests/lljoint_test.cpp @@ -150,11 +150,11 @@ namespace tut  	template<> template<>  	void lljoint_object::test<11>()  	{ -		LLJoint lljoint("parent");  		S32 joint_num = 12; -		lljoint.setJointNum(joint_num); +		LLJoint lljoint(joint_num); +		lljoint.setName("parent");  		S32 jointNum = 	lljoint.getJointNum(); -		ensure("setJointNum()/getJointNum failed ", (jointNum == joint_num)); +		ensure("getJointNum failed ", (jointNum == joint_num));  	}  	template<> template<> | 
