SL-93 WIP - pelvis fixup offsets

master
Brad Payne (Vir Linden) 2014-11-03 05:46:31 -05:00
parent 90aca8f95a
commit 7fec81b102
4 changed files with 36 additions and 3 deletions

View File

@ -339,6 +339,14 @@ void LLJoint::removeAttachmentPosOverride( const LLUUID& mesh_id, const std::str
}
//--------------------------------------------------------------------
// hasAttachmentPosOverride()
//--------------------------------------------------------------------
bool LLJoint::hasAttachmentPosOverride( LLVector3& pos, LLUUID& mesh_id ) const
{
return m_attachmentOverrides.findActiveOverride(mesh_id,pos);
}
//--------------------------------------------------------------------
// updatePos()
//--------------------------------------------------------------------

View File

@ -201,6 +201,7 @@ public:
void addAttachmentPosOverride( const LLVector3& pos, const LLUUID& mesh_id, const std::string& av_info );
void removeAttachmentPosOverride( const LLUUID& mesh_id, const std::string& av_info );
bool hasAttachmentPosOverride( LLVector3& pos, LLUUID& mesh_id ) const;
//Accessor for the joint id
LLUUID getId( void ) { return mId; }

View File

@ -7674,6 +7674,27 @@ void LLVOAvatar::dumpArchetypeXML(const std::string& prefix, bool group_by_weara
pJoint->getName().c_str(), pos[0], pos[1], pos[2], scale[0], scale[1], scale[2]);
}
for (iter = mSkeleton.begin(); iter != end; ++iter)
{
LLJoint* pJoint = (*iter);
LLVector3 pos;
LLUUID mesh_id;
if (pJoint->hasAttachmentPosOverride(pos,mesh_id))
{
apr_file_printf( file, "\t\t<joint_offset name=\"%s\" position=\"%f %f %f\" mesh_id=\"%s\"/>\n",
pJoint->getName().c_str(), pos[0], pos[1], pos[2], mesh_id.asString().c_str());
}
}
F32 pelvis_fixup;
LLUUID mesh_id;
if (hasPelvisFixup(pelvis_fixup, mesh_id))
{
apr_file_printf( file, "\t\t<pelvis_fixup z=\"%f\" mesh_id=\"%s\"/>\n",
pelvis_fixup, mesh_id.asString().c_str());
}
apr_file_printf( file, "\t</archetype>\n" );
apr_file_printf( file, "\n</linden_genepool>\n" );

View File

@ -4613,6 +4613,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
{
const int jointCnt = pSkinData->mJointNames.size();
const F32 pelvisZOffset = pSkinData->mPelvisOffset;
const LLUUID& mesh_id = pSkinData->mMeshID;
bool fullRig = (jointCnt>=JOINT_COUNT_REQUIRED_FOR_FULLRIG) ? true : false;
if ( fullRig )
{
@ -4626,18 +4627,20 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
const LLVector3& jointPos = pSkinData->mAlternateBindMatrix[i].getTranslation();
//Set the joint position
const LLUUID& mesh_id = pSkinData->mMeshID;
pJoint->addAttachmentPosOverride( jointPos, mesh_id, pAvatarVO->avString() );
//If joint is a pelvis then handle old/new pelvis to foot values
if ( lookingForJoint == "mPelvis" )
{
// FIXME move
pAvatarVO->addPelvisFixup( pelvisZOffset, mesh_id );
pelvisGotSet = true;
}
}
}
if (pelvisZOffset != 0.0F)
{
pAvatarVO->addPelvisFixup( pelvisZOffset, mesh_id );
pelvisGotSet = true;
}
}
}
}