diff options
author | lhofhansl <lhofhansl@yahoo.com> | 2016-11-30 00:13:14 -0800 |
---|---|---|
committer | Zeno- <kde.psych@gmail.com> | 2016-11-30 18:13:14 +1000 |
commit | 5dc61988788e44bc87e8c57c0beded97d4efdf05 (patch) | |
tree | cc812fe691ba6ad62dbe65745d89c86cd974e817 /src/network | |
parent | c38985825f299999135cc01aaf0052ec9138135a (diff) | |
download | minetest-5dc61988788e44bc87e8c57c0beded97d4efdf05.tar.gz minetest-5dc61988788e44bc87e8c57c0beded97d4efdf05.tar.bz2 minetest-5dc61988788e44bc87e8c57c0beded97d4efdf05.zip |
Optimize/adjust blocks/ActiveObjects sent at the server based on client settings. (#4811)
Optimize/adjust blocks and active blocks sent at the server based on client settings.
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/networkprotocol.h | 2 | ||||
-rw-r--r-- | src/network/serverpackethandler.cpp | 13 |
2 files changed, 15 insertions, 0 deletions
diff --git a/src/network/networkprotocol.h b/src/network/networkprotocol.h index e3fcae0c6..c9919e1c4 100644 --- a/src/network/networkprotocol.h +++ b/src/network/networkprotocol.h @@ -651,6 +651,8 @@ enum ToServerCommand [2+12+12] s32 pitch*100 [2+12+12+4] s32 yaw*100 [2+12+12+4+4] u32 keyPressed + [2+12+12+4+4+1] u8 fov*80 + [2+12+12+4+4+4+1] u8 wanted_range / MAP_BLOCKSIZE */ TOSERVER_GOTBLOCKS = 0x24, diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index 70eb0a828..5e50bb865 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -782,6 +782,7 @@ void Server::process_PlayerPos(RemotePlayer *player, PlayerSAO *playersao, v3s32 ps, ss; s32 f32pitch, f32yaw; + u8 f32fov; *pkt >> ps; *pkt >> ss; @@ -792,8 +793,18 @@ void Server::process_PlayerPos(RemotePlayer *player, PlayerSAO *playersao, f32 yaw = (f32)f32yaw / 100.0; u32 keyPressed = 0; + // default behavior (in case an old client doesn't send these) + f32 fov = (72.0*M_PI/180) * 4./3.; + u8 wanted_range = 0; + if (pkt->getRemainingBytes() >= 4) *pkt >> keyPressed; + if (pkt->getRemainingBytes() >= 1) { + *pkt >> f32fov; + fov = (f32)f32fov / 80.0; + } + if (pkt->getRemainingBytes() >= 1) + *pkt >> wanted_range; v3f position((f32)ps.X / 100.0, (f32)ps.Y / 100.0, (f32)ps.Z / 100.0); v3f speed((f32)ss.X / 100.0, (f32)ss.Y / 100.0, (f32)ss.Z / 100.0); @@ -805,6 +816,8 @@ void Server::process_PlayerPos(RemotePlayer *player, PlayerSAO *playersao, player->setSpeed(speed); playersao->setPitch(pitch); playersao->setYaw(yaw); + playersao->setFov(fov); + playersao->setWantedRange(wanted_range); player->keyPressed = keyPressed; player->control.up = (keyPressed & 1); player->control.down = (keyPressed & 2); |