| 2916 | } |
| 2917 | |
| 2918 | U32 ShapeBase::packUpdate(NetConnection *con, U32 mask, BitStream *stream) |
| 2919 | { |
| 2920 | U32 retMask = Parent::packUpdate(con, mask, stream); |
| 2921 | |
| 2922 | if (mask & InitialUpdateMask) { |
| 2923 | // mask off sounds that aren't playing |
| 2924 | S32 i; |
| 2925 | for (i = 0; i < MaxSoundThreads; i++) |
| 2926 | if (!mSoundThread[i].play) |
| 2927 | mask &= ~(SoundMaskN << i); |
| 2928 | |
| 2929 | // mask off threads that aren't running |
| 2930 | for (i = 0; i < MaxScriptThreads; i++) |
| 2931 | if (mScriptThread[i].sequence == -1) |
| 2932 | mask &= ~(ThreadMaskN << i); |
| 2933 | |
| 2934 | // mask off images that aren't updated |
| 2935 | for(i = 0; i < MaxMountedImages; i++) |
| 2936 | if(!mMountedImageList[i].dataBlock) |
| 2937 | mask &= ~(ImageMaskN << i); |
| 2938 | } |
| 2939 | |
| 2940 | if(!stream->writeFlag(mask & (NameMask | DamageMask | SoundMask | MeshHiddenMask | |
| 2941 | ThreadMask | ImageMask | CloakMask | SkinMask))) |
| 2942 | return retMask; |
| 2943 | |
| 2944 | if (stream->writeFlag(mask & DamageMask)) { |
| 2945 | stream->writeFloat(mClampF(mDamage / mDataBlock->maxDamage, 0.f, 1.f), DamageLevelBits); |
| 2946 | stream->writeInt(mDamageState,NumDamageStateBits); |
| 2947 | stream->writeNormalVector( damageDir, 8 ); |
| 2948 | } |
| 2949 | |
| 2950 | if (stream->writeFlag(mask & ThreadMask)) { |
| 2951 | for (S32 i = 0; i < MaxScriptThreads; i++) { |
| 2952 | Thread& st = mScriptThread[i]; |
| 2953 | if (stream->writeFlag( (st.sequence != -1 || st.state == Thread::Destroy) && (mask & (ThreadMaskN << i)) ) ) { |
| 2954 | stream->writeInt(st.sequence,ThreadSequenceBits); |
| 2955 | stream->writeInt(st.state,2); |
| 2956 | stream->write(st.timescale); |
| 2957 | stream->write(st.position); |
| 2958 | stream->writeFlag(st.atEnd); |
| 2959 | } |
| 2960 | } |
| 2961 | } |
| 2962 | |
| 2963 | if (stream->writeFlag(mask & SoundMask)) { |
| 2964 | for (S32 i = 0; i < MaxSoundThreads; i++) { |
| 2965 | Sound& st = mSoundThread[i]; |
| 2966 | if (stream->writeFlag(mask & (SoundMaskN << i))) |
| 2967 | if (stream->writeFlag(st.play)) |
| 2968 | stream->writeRangedU32(st.profile->getId(),DataBlockObjectIdFirst, |
| 2969 | DataBlockObjectIdLast); |
| 2970 | } |
| 2971 | } |
| 2972 | |
| 2973 | if (stream->writeFlag(mask & ImageMask)) { |
| 2974 | for (S32 i = 0; i < MaxMountedImages; i++) |
| 2975 | if (stream->writeFlag(mask & (ImageMaskN << i))) { |
nothing calls this directly
no test coverage detected