mstudioseqdesc_t &CStudioHdr::pSeqdesc( int i ) { Assert( ( i >= 0 && i < GetNumSeq() ) || ( i == 1 && GetNumSeq() <= 1 ) ); if ( i < 0 || i >= GetNumSeq() ) { if ( GetNumSeq() <= 0 ) { // Return a zero'd out struct reference if we've got nothing. // C_BaseObject::StopAnimGeneratedSounds was crashing due to this function // returning a reference to garbage. It should now see numevents is 0, // and bail. static mstudioseqdesc_t s_nil_seq; return s_nil_seq; } // Avoid reading random memory. i = 0; } if (m_pVModel == NULL) { return *m_pStudioHdr->pLocalSeqdesc( i ); } const studiohdr_t *pStudioHdr = GroupStudioHdr( m_pVModel->m_seq[i].group ); return *pStudioHdr->pLocalSeqdesc( m_pVModel->m_seq[i].index ); }
mstudioseqdesc_t &CStudioHdr::pSeqdesc( int i ) const { Assert( i >= 0 && i < GetNumSeq() ); if ( i < 0 || i >= GetNumSeq() ) { // Avoid reading random memory. i = 0; } if (m_pVModel == NULL) { return *m_pStudioHdr->pLocalSeqdesc( i ); } const studiohdr_t *pStudioHdr = GroupStudioHdr( m_pVModel->m_seq[i].group ); return *pStudioHdr->pLocalSeqdesc( m_pVModel->m_seq[i].index ); }
int studiohdr_t::CountAutoplaySequences() const { int count = 0; for (int i = 0; i < GetNumSeq(); i++) { mstudioseqdesc_t &seqdesc = pSeqdesc( i ); if (seqdesc.flags & STUDIO_AUTOPLAY) { count++; } } return count; }
int studiohdr_t::CopyAutoplaySequences( unsigned short *pOut, int outCount ) const { int outIndex = 0; for (int i = 0; i < GetNumSeq() && outIndex < outCount; i++) { mstudioseqdesc_t &seqdesc = pSeqdesc( i ); if (seqdesc.flags & STUDIO_AUTOPLAY) { pOut[outIndex] = i; outIndex++; } } return outIndex; }
//========================================================= //========================================================= 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() ); }