| 1157 | //---------------------------------------------------------------------------- |
| 1158 | |
| 1159 | U32 Camera::packUpdate(NetConnection *con, U32 mask, BitStream *bstream) |
| 1160 | { |
| 1161 | Parent::packUpdate(con, mask, bstream); |
| 1162 | |
| 1163 | if (bstream->writeFlag(mask & UpdateMask)) |
| 1164 | { |
| 1165 | bstream->writeFlag(mLocked); |
| 1166 | mathWrite(*bstream, mOffset); |
| 1167 | } |
| 1168 | |
| 1169 | if(bstream->writeFlag(mask & NewtonCameraMask)) |
| 1170 | { |
| 1171 | bstream->write(mAngularForce); |
| 1172 | bstream->write(mAngularDrag); |
| 1173 | bstream->write(mMass); |
| 1174 | bstream->write(mDrag); |
| 1175 | bstream->write(mFlyForce); |
| 1176 | bstream->write(mSpeedMultiplier); |
| 1177 | bstream->write(mBrakeMultiplier); |
| 1178 | } |
| 1179 | |
| 1180 | if(bstream->writeFlag(mask & EditOrbitMask)) |
| 1181 | { |
| 1182 | bstream->write(mEditOrbitPoint.x); |
| 1183 | bstream->write(mEditOrbitPoint.y); |
| 1184 | bstream->write(mEditOrbitPoint.z); |
| 1185 | bstream->write(mCurrentEditOrbitDist); |
| 1186 | } |
| 1187 | |
| 1188 | // The rest of the data is part of the control object packet update. |
| 1189 | // If we're controlled by this client, we don't need to send it. |
| 1190 | if(bstream->writeFlag(getControllingClient() == con && !(mask & InitialUpdateMask))) |
| 1191 | return 0; |
| 1192 | |
| 1193 | if (bstream->writeFlag(mask & MoveMask)) |
| 1194 | { |
| 1195 | Point3F pos; |
| 1196 | mObjToWorld.getColumn(3,&pos); |
| 1197 | bstream->write(pos.x); |
| 1198 | bstream->write(pos.y); |
| 1199 | bstream->write(pos.z); |
| 1200 | bstream->write(mRot.x); |
| 1201 | bstream->write(mRot.z); |
| 1202 | |
| 1203 | // Only required if in NewtonFlyMode |
| 1204 | F32 len = mVelocity.len(); |
| 1205 | if(bstream->writeFlag(mNewtonMode && len > 0.02f)) |
| 1206 | { |
| 1207 | Point3F outVel = mVelocity; |
| 1208 | outVel *= 1.0f/len; |
| 1209 | bstream->writeNormalVector(outVel, 10); |
| 1210 | len *= 32.0f; // 5 bits of fraction |
| 1211 | if(len > 8191) |
| 1212 | len = 8191; |
| 1213 | bstream->writeInt((S32)len, 13); |
| 1214 | } |
| 1215 | |
| 1216 | // Rotation |