unwrap LoadMilkshapeAsciiBones (no other changes)

This commit is contained in:
Glenn Maynard
2004-08-19 07:47:56 +00:00
parent 73420d5aa1
commit e6bc94a4af
+93 -93
View File
@@ -286,116 +286,116 @@ void Model::LoadMilkshapeAsciiBones( CString sAniName, CString sPath )
// bones // bones
// //
int nNumBones = 0; int nNumBones = 0;
if( sscanf (sLine, "Bones: %d", &nNumBones) == 1 ) if( sscanf (sLine, "Bones: %d", &nNumBones) != 1 )
continue;
m_mapNameToAnimation[sAniName] = msAnimation();
msAnimation &Animation = m_mapNameToAnimation[sAniName];
char szName[MS_MAX_NAME];
Animation.Bones.resize( nNumBones );
for( int i = 0; i < nNumBones; i++ )
{ {
m_mapNameToAnimation[sAniName] = msAnimation(); msBone& Bone = Animation.Bones[i];
msAnimation &Animation = m_mapNameToAnimation[sAniName];
char szName[MS_MAX_NAME]; // name
if( f.GetLine( sLine ) <= 0 )
THROW;
if (sscanf (sLine, "\"%[^\"]\"", szName) != 1)
THROW;
strcpy( Bone.szName, szName );
Animation.Bones.resize( nNumBones ); // parent
if( f.GetLine( sLine ) <= 0 )
THROW;
strcpy (szName, "");
sscanf (sLine, "\"%[^\"]\"", szName);
for( int i = 0; i < nNumBones; i++ ) strcpy( Bone.szParentName, szName );
// flags, position, rotation
RageVector3 Position, Rotation;
if( f.GetLine( sLine ) <= 0 )
THROW;
int nFlags;
if (sscanf (sLine, "%d %f %f %f %f %f %f",
&nFlags,
&Position[0], &Position[1], &Position[2],
&Rotation[0], &Rotation[1], &Rotation[2]) != 7)
{ {
msBone& Bone = Animation.Bones[i]; THROW;
}
Rotation = RadianToDegree(Rotation);
// name Bone.nFlags = nFlags;
if( f.GetLine( sLine ) <= 0 ) memcpy( &Bone.Position, &Position, sizeof(Bone.Position) );
THROW; memcpy( &Bone.Rotation, &Rotation, sizeof(Bone.Rotation) );
if (sscanf (sLine, "\"%[^\"]\"", szName) != 1)
THROW;
strcpy( Bone.szName, szName );
// parent // position key count
if( f.GetLine( sLine ) <= 0 ) if( f.GetLine( sLine ) <= 0 )
THROW; THROW;
strcpy (szName, ""); int nNumPositionKeys = 0;
sscanf (sLine, "\"%[^\"]\"", szName); if (sscanf (sLine, "%d", &nNumPositionKeys) != 1)
THROW;
strcpy( Bone.szParentName, szName ); Bone.PositionKeys.resize( nNumPositionKeys );
// flags, position, rotation for( int j = 0; j < nNumPositionKeys; ++j )
RageVector3 Position, Rotation; {
if( f.GetLine( sLine ) <= 0 ) if( f.GetLine( sLine ) <= 0 )
THROW; THROW;
int nFlags; float fTime;
if (sscanf (sLine, "%d %f %f %f %f %f %f", if (sscanf (sLine, "%f %f %f %f", &fTime, &Position[0], &Position[1], &Position[2]) != 4)
&nFlags,
&Position[0], &Position[1], &Position[2],
&Rotation[0], &Rotation[1], &Rotation[2]) != 7)
{
THROW;
}
Rotation = RadianToDegree(Rotation);
Bone.nFlags = nFlags;
memcpy( &Bone.Position, &Position, sizeof(Bone.Position) );
memcpy( &Bone.Rotation, &Rotation, sizeof(Bone.Rotation) );
// position key count
if( f.GetLine( sLine ) <= 0 )
THROW;
int nNumPositionKeys = 0;
if (sscanf (sLine, "%d", &nNumPositionKeys) != 1)
THROW; THROW;
Bone.PositionKeys.resize( nNumPositionKeys ); msPositionKey key;
key.fTime = fTime;
for( int j = 0; j < nNumPositionKeys; ++j ) key.Position = RageVector3( Position[0], Position[1], Position[2] );
{ Bone.PositionKeys[j] = key;
if( f.GetLine( sLine ) <= 0 )
THROW;
float fTime;
if (sscanf (sLine, "%f %f %f %f", &fTime, &Position[0], &Position[1], &Position[2]) != 4)
THROW;
msPositionKey key;
key.fTime = fTime;
key.Position = RageVector3( Position[0], Position[1], Position[2] );
Bone.PositionKeys[j] = key;
}
// rotation key count
if( f.GetLine( sLine ) <= 0 )
THROW;
int nNumRotationKeys = 0;
if (sscanf (sLine, "%d", &nNumRotationKeys) != 1)
THROW;
Bone.RotationKeys.resize( nNumRotationKeys );
for( int j = 0; j < nNumRotationKeys; ++j )
{
if( f.GetLine( sLine ) <= 0 )
THROW;
float fTime;
if (sscanf (sLine, "%f %f %f %f", &fTime, &Rotation[0], &Rotation[1], &Rotation[2]) != 4)
THROW;
Rotation = RadianToDegree(Rotation);
msRotationKey key;
key.fTime = fTime;
key.Rotation = RageVector3( Rotation[0], Rotation[1], Rotation[2] );
Bone.RotationKeys[j] = key;
}
} }
// Ignore "Frames:" in file. Calculate it ourself // rotation key count
Animation.nTotalFrames = 0; if( f.GetLine( sLine ) <= 0 )
for( int i = 0; i < (int)Animation.Bones.size(); i++ ) THROW;
{ int nNumRotationKeys = 0;
msBone& Bone = Animation.Bones[i]; if (sscanf (sLine, "%d", &nNumRotationKeys) != 1)
for( unsigned j = 0; j < Bone.PositionKeys.size(); ++j ) THROW;
Animation.nTotalFrames = max( Animation.nTotalFrames, (int)Bone.PositionKeys[j].fTime );
for( unsigned j = 0; j < Bone.RotationKeys.size(); ++j )
Animation.nTotalFrames = max( Animation.nTotalFrames, (int)Bone.RotationKeys[j].fTime );
}
PlayAnimation( sAniName ); Bone.RotationKeys.resize( nNumRotationKeys );
for( int j = 0; j < nNumRotationKeys; ++j )
{
if( f.GetLine( sLine ) <= 0 )
THROW;
float fTime;
if (sscanf (sLine, "%f %f %f %f", &fTime, &Rotation[0], &Rotation[1], &Rotation[2]) != 4)
THROW;
Rotation = RadianToDegree(Rotation);
msRotationKey key;
key.fTime = fTime;
key.Rotation = RageVector3( Rotation[0], Rotation[1], Rotation[2] );
Bone.RotationKeys[j] = key;
}
}
// Ignore "Frames:" in file. Calculate it ourself
Animation.nTotalFrames = 0;
for( int i = 0; i < (int)Animation.Bones.size(); i++ )
{
msBone& Bone = Animation.Bones[i];
for( unsigned j = 0; j < Bone.PositionKeys.size(); ++j )
Animation.nTotalFrames = max( Animation.nTotalFrames, (int)Bone.PositionKeys[j].fTime );
for( unsigned j = 0; j < Bone.RotationKeys.size(); ++j )
Animation.nTotalFrames = max( Animation.nTotalFrames, (int)Bone.RotationKeys[j].fTime );
} }
PlayAnimation( sAniName );
} }
} }