示例#1
0
float StudioModel::GetDuration( int iSequence )
{
	CStudioHdr *pStudioHdr = GetStudioHdr();
	if ( !pStudioHdr )
		return 0.0f;

	return Studio_Duration( pStudioHdr, iSequence, m_poseparameter );
}
//-----------------------------------------------------------------------------
// Advance the frame
//-----------------------------------------------------------------------------
void AdvanceFrame( CStudioHdr *pStudioHdr, int iRun, int model, float dt )
{
	if (dt > 0.1)
		dt = 0.1f;

	float t = Studio_Duration( pStudioHdr, g_BenchRuns[iRun].sequence1[model], s_PoseParameter );

	if (t > 0)
	{
		s_Cycle[model] += dt / t;

		// wrap
		s_Cycle[model] -= (int)(s_Cycle[model]);
	}
	else
	{
		s_Cycle[model] = 0;
	}
}
//=========================================================
//=========================================================
float CAnimating::SequenceDuration( CStudioHdr *pStudioHdr, int iSequence )
{
	if ( !pStudioHdr )
	{
		DevWarning( 2, "CBaseAnimating::SequenceDuration( %d ) NULL pstudiohdr on %s!\n", iSequence, GetClassname() );
		return 0.1;
	}
	if ( !pStudioHdr->SequencesAvailable() )
	{
		return 0.1;
	}
	if (iSequence >= pStudioHdr->GetNumSeq() || iSequence < 0 )
	{
		DevWarning( 2, "CBaseAnimating::SequenceDuration( %d ) out of range\n", iSequence );
		return 0.1;
	}

	return Studio_Duration( pStudioHdr, iSequence, GetPoseParameterArray() );
}