@@ -930,13 +930,16 @@ void Client::Send(NetworkPacket* pkt)
930
930
}
931
931
932
932
// Will fill up 12 + 12 + 4 + 4 + 4 bytes
933
- void writePlayerPos (LocalPlayer *myplayer, NetworkPacket *pkt)
933
+ void writePlayerPos (LocalPlayer *myplayer, ClientMap *clientMap, NetworkPacket *pkt)
934
934
{
935
- v3f pf = myplayer->getPosition () * 100 ;
936
- v3f sf = myplayer->getSpeed () * 100 ;
937
- s32 pitch = myplayer->getPitch () * 100 ;
938
- s32 yaw = myplayer->getYaw () * 100 ;
939
- u32 keyPressed = myplayer->keyPressed ;
935
+ v3f pf = myplayer->getPosition () * 100 ;
936
+ v3f sf = myplayer->getSpeed () * 100 ;
937
+ s32 pitch = myplayer->getPitch () * 100 ;
938
+ s32 yaw = myplayer->getYaw () * 100 ;
939
+ u32 keyPressed = myplayer->keyPressed ;
940
+ // scaled by 80, so that pi can fit into a u8
941
+ u8 fov = clientMap->getCameraFov () * 80 ;
942
+ u8 wanted_range = clientMap->getControl ().wanted_range / MAP_BLOCKSIZE;
940
943
941
944
v3s32 position (pf.X , pf.Y , pf.Z );
942
945
v3s32 speed (sf.X , sf.Y , sf.Z );
@@ -948,9 +951,11 @@ void writePlayerPos(LocalPlayer *myplayer, NetworkPacket *pkt)
948
951
[12+12] s32 pitch*100
949
952
[12+12+4] s32 yaw*100
950
953
[12+12+4+4] u32 keyPressed
954
+ [12+12+4+4+1] u8 fov*80
955
+ [12+12+4+4+4+1] u8 wanted_range / MAP_BLOCKSIZE
951
956
*/
952
-
953
957
*pkt << position << speed << pitch << yaw << keyPressed;
958
+ *pkt << fov << wanted_range;
954
959
}
955
960
956
961
void Client::interact (u8 action, const PointedThing& pointed)
@@ -992,7 +997,7 @@ void Client::interact(u8 action, const PointedThing& pointed)
992
997
993
998
pkt.putLongString (tmp_os.str ());
994
999
995
- writePlayerPos (myplayer, &pkt);
1000
+ writePlayerPos (myplayer, &m_env. getClientMap (), & pkt);
996
1001
997
1002
Send (&pkt);
998
1003
}
@@ -1296,19 +1301,30 @@ void Client::sendPlayerPos()
1296
1301
if (myplayer == NULL )
1297
1302
return ;
1298
1303
1304
+ ClientMap &map = m_env.getClientMap ();
1305
+
1306
+ u8 camera_fov = map.getCameraFov ();
1307
+ u8 wanted_range = map.getControl ().wanted_range ;
1308
+
1299
1309
// Save bandwidth by only updating position when something changed
1300
1310
if (myplayer->last_position == myplayer->getPosition () &&
1301
- myplayer->last_speed == myplayer->getSpeed () &&
1302
- myplayer->last_pitch == myplayer->getPitch () &&
1303
- myplayer->last_yaw == myplayer->getYaw () &&
1304
- myplayer->last_keyPressed == myplayer->keyPressed )
1311
+ myplayer->last_speed == myplayer->getSpeed () &&
1312
+ myplayer->last_pitch == myplayer->getPitch () &&
1313
+ myplayer->last_yaw == myplayer->getYaw () &&
1314
+ myplayer->last_keyPressed == myplayer->keyPressed &&
1315
+ myplayer->last_camera_fov == camera_fov &&
1316
+ myplayer->last_wanted_range == wanted_range)
1305
1317
return ;
1306
1318
1307
- myplayer->last_position = myplayer->getPosition ();
1308
- myplayer->last_speed = myplayer->getSpeed ();
1309
- myplayer->last_pitch = myplayer->getPitch ();
1310
- myplayer->last_yaw = myplayer->getYaw ();
1311
- myplayer->last_keyPressed = myplayer->keyPressed ;
1319
+ myplayer->last_position = myplayer->getPosition ();
1320
+ myplayer->last_speed = myplayer->getSpeed ();
1321
+ myplayer->last_pitch = myplayer->getPitch ();
1322
+ myplayer->last_yaw = myplayer->getYaw ();
1323
+ myplayer->last_keyPressed = myplayer->keyPressed ;
1324
+ myplayer->last_camera_fov = camera_fov;
1325
+ myplayer->last_wanted_range = wanted_range;
1326
+
1327
+ // infostream << "Sending Player Position information" << std::endl;
1312
1328
1313
1329
u16 our_peer_id;
1314
1330
{
@@ -1324,7 +1340,7 @@ void Client::sendPlayerPos()
1324
1340
1325
1341
NetworkPacket pkt (TOSERVER_PLAYERPOS, 12 + 12 + 4 + 4 + 4 );
1326
1342
1327
- writePlayerPos (myplayer, &pkt);
1343
+ writePlayerPos (myplayer, &map, & pkt);
1328
1344
1329
1345
Send (&pkt);
1330
1346
}
0 commit comments