Ejemplo n.º 1
0
void SFXEmitter::unpackUpdate( NetConnection *conn, BitStream *stream )
{
   Parent::unpackUpdate( conn, stream );

   // initial update?
   bool initialUpdate = stream->readFlag();

   mPlayOnAdd = stream->readFlag();

   // transform
   if ( _readDirtyFlag( stream, Transform ) )
   {
      MatrixF mat;
      stream->readAffineTransform(&mat);
      Parent::setTransform(mat);
   }

   // profile
   if ( _readDirtyFlag( stream, Profile ) )
   {
      if ( stream->readFlag() )
      {
         S32 profileId = stream->readRangedU32( DataBlockObjectIdFirst, DataBlockObjectIdLast );
         mProfile = dynamic_cast<SFXProfile*>( Sim::findObject( profileId ) );
      }
      else
         mProfile = NULL;
   }

   // filename
   if ( _readDirtyFlag( stream, Filename ) )
      mLocalProfile.mFilename = stream->readSTString();

   // volume
   if ( _readDirtyFlag( stream, Volume ) )
      stream->read( &mDescription.mVolume );
      
   // pitch
   if( _readDirtyFlag( stream, Pitch ) )
      stream->read( &mDescription.mPitch );

   // islooping
   if ( _readDirtyFlag( stream, IsLooping ) )
      mDescription.mIsLooping = stream->readFlag();
      
   if( _readDirtyFlag( stream, IsStreaming ) )
      mDescription.mIsStreaming = stream->readFlag();

   // is3d
   if ( _readDirtyFlag( stream, Is3D ) )
      mDescription.mIs3D = stream->readFlag();

   // ReferenceDistance
   if ( _readDirtyFlag( stream, ReferenceDistance ) )
      stream->read( &mDescription.mReferenceDistance );

   // maxdistance
   if ( _readDirtyFlag( stream, MaxDistance ) )
      stream->read( &mDescription.mMaxDistance );

   // coneinsideangle
   if ( _readDirtyFlag( stream, ConeInsideAngle ) )
      stream->read( &mDescription.mConeInsideAngle );

   // coneoutsideangle
   if ( _readDirtyFlag( stream, ConeOutsideAngle ) )
      stream->read( &mDescription.mConeOutsideAngle );

   // coneoutsidevolume
   if ( _readDirtyFlag( stream, ConeOutsideVolume ) )
      stream->read( &mDescription.mConeOutsideVolume );

   // channel
   if ( _readDirtyFlag( stream, Channel ) )
      stream->read( &mDescription.mChannel );
      
   // fadein
   if ( _readDirtyFlag( stream, FadeInTime ) )
      stream->read( &mDescription.mFadeInTime );
      
   // fadeout
   if( _readDirtyFlag( stream, FadeOutTime ) )
      stream->read( &mDescription.mFadeOutTime );

   // update the emitter now?
   if ( !initialUpdate )
      _update();

   // Check the source playback masks.
   if ( stream->readFlag() ) // SourcePlayMask
      play();
   if ( stream->readFlag() ) // SourceStopMask
      stop();
}
Ejemplo n.º 2
0
void SFXEmitter::unpackUpdate( NetConnection *conn, BitStream *stream )
{
   Parent::unpackUpdate( conn, stream );

   // initial update?
   bool initialUpdate = stream->readFlag();

   mPlayOnAdd = stream->readFlag();

   // transform
   if ( _readDirtyFlag( stream, Transform ) )
   {
      MatrixF mat;
      stream->readAffineTransform(&mat);
      Parent::setTransform(mat);
   }

   // track
   if ( _readDirtyFlag( stream, Track ) )
   {
      String errorStr;
      if( !sfxReadAndResolve( stream, &mTrack, errorStr ) )
         Con::errorf( "%s", errorStr.c_str() );
   }

   // filename
   if ( _readDirtyFlag( stream, Filename ) )
      mLocalProfile.mFilename = stream->readSTString();

   // volume
   if ( _readDirtyFlag( stream, Volume ) )
      stream->read( &mDescription.mVolume );
      
   // pitch
   if( _readDirtyFlag( stream, Pitch ) )
      stream->read( &mDescription.mPitch );

   // islooping
   if ( _readDirtyFlag( stream, IsLooping ) )
      mDescription.mIsLooping = stream->readFlag();
      
   if( _readDirtyFlag( stream, IsStreaming ) )
      mDescription.mIsStreaming = stream->readFlag();

   // is3d
   if ( _readDirtyFlag( stream, Is3D ) )
      mDescription.mIs3D = stream->readFlag();

   // mindistance
   if ( _readDirtyFlag( stream, MinDistance ) )
      stream->read( &mDescription.mMinDistance );

   // maxdistance
   if ( _readDirtyFlag( stream, MaxDistance ) )
   {
      stream->read( &mDescription.mMaxDistance );
      mObjScale.set( mDescription.mMaxDistance, mDescription.mMaxDistance, mDescription.mMaxDistance );
   }

   // coneinsideangle
   if ( _readDirtyFlag( stream, ConeInsideAngle ) )
      stream->read( &mDescription.mConeInsideAngle );

   // coneoutsideangle
   if ( _readDirtyFlag( stream, ConeOutsideAngle ) )
      stream->read( &mDescription.mConeOutsideAngle );

   // coneoutsidevolume
   if ( _readDirtyFlag( stream, ConeOutsideVolume ) )
      stream->read( &mDescription.mConeOutsideVolume );

   // sourcegroup
   if ( _readDirtyFlag( stream, SourceGroup ) )
   {
      String errorStr;
      if( !sfxReadAndResolve( stream, &mDescription.mSourceGroup, errorStr ) )
         Con::errorf( "%s", errorStr.c_str() );
   }
      
   // fadein
   if ( _readDirtyFlag( stream, FadeInTime ) )
      stream->read( &mDescription.mFadeInTime );
      
   // fadeout
   if( _readDirtyFlag( stream, FadeOutTime ) )
      stream->read( &mDescription.mFadeOutTime );
      
   // scatterdistance
   if( _readDirtyFlag( stream, ScatterDistance ) )
      mathRead( *stream, &mDescription.mScatterDistance );
      
   mUseTrackDescriptionOnly = stream->readFlag();

   // update the emitter now?
   if ( !initialUpdate )
      _update();

   // Check the source playback masks.
   if ( stream->readFlag() ) // SourcePlayMask
      play();
   if ( stream->readFlag() ) // SourceStopMask
      stop();
}