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(); }
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(); }