void CSentence::MakeRuntimeOnly() { m_bIsCached = true; #if PHONEME_EDITOR delete m_szText; m_szText = NULL; int c = m_Words.Count(); for ( int i = 0; i < c; ++i ) { CWordTag *word = m_Words[ i ]; Assert( word ); int pcount = word->m_Phonemes.Count(); for ( int j = 0; j < pcount; ++j ) { CPhonemeTag *phoneme = word->m_Phonemes[ j ]; assert( phoneme ); AddRuntimePhoneme( phoneme ); } } // Remove all existing words while ( m_Words.Count() > 0 ) { CWordTag *word = m_Words[ 0 ]; delete word; m_Words.Remove( 0 ); } #endif m_bIsValid = true; }
//----------------------------------------------------------------------------- // Purpose: Assignment operator // Input : src - // Output : CSentence& //----------------------------------------------------------------------------- CSentence& CSentence::operator=( const CSentence& src ) { int i; // Clear current stuff Reset(); int c; #if PHONEME_EDITOR // Copy everything for ( i = 0 ; i < src.m_Words.Size(); i++ ) { CWordTag *word = src.m_Words[ i ]; CWordTag *newWord = new CWordTag( *word ); AddWordTag( newWord ); } SetText( src.GetText() ); m_nResetWordBase = src.m_nResetWordBase; c = src.m_EmphasisSamples.Size(); for ( i = 0; i < c; i++ ) { CEmphasisSample s = src.m_EmphasisSamples[ i ]; m_EmphasisSamples.AddToTail( s ); } #endif m_bIsCached = src.m_bIsCached; c = src.GetRuntimePhonemeCount(); for ( i = 0; i < c; i++ ) { Assert( m_bIsCached ); const CBasePhonemeTag *tag = src.GetRuntimePhoneme( i ); CPhonemeTag full; ((CBasePhonemeTag &)(full)) = *tag; AddRuntimePhoneme( &full ); } m_bShouldVoiceDuck = src.m_bShouldVoiceDuck; #if PHONEME_EDITOR m_bStoreCheckSum = src.m_bStoreCheckSum; m_uCheckSum = src.m_uCheckSum; #endif m_bIsValid = src.m_bIsValid; return (*this); }
//----------------------------------------------------------------------------- // Purpose: // Input : buf - //----------------------------------------------------------------------------- void CSentence::CacheRestoreFromBuffer( CUtlBuffer& buf ) { Assert( !buf.IsText() ); Reset(); m_bIsCached = true; int version = buf.GetChar(); if ( version != CACHED_SENTENCE_VERSION ) { // Uh oh, version changed... m_bIsValid = false; return; } unsigned short pcount = (unsigned short)buf.GetShort(); CPhonemeTag pt; int i; for ( i = 0; i < pcount; ++i ) { unsigned short code = buf.GetShort(); float st = buf.GetFloat(); float et = buf.GetFloat(); pt.SetPhonemeCode( code ); pt.SetStartTime( st ); pt.SetEndTime( et ); AddRuntimePhoneme( &pt ); } // Now read emphasis samples int c = buf.GetShort(); for ( i = 0; i < c; i++ ) { CEmphasisSample sample; sample.SetSelected( false ); sample.time = buf.GetFloat(); sample.value = (float)buf.GetShort() / 32767.0f; m_EmphasisSamples.AddToTail( sample ); } // And voice duck SetVoiceDuck( buf.GetChar() == 0 ? false : true ); m_bIsValid = true; }