Fix computation of viewing range (in blocks) sent to server (#4882)
authorRogier-5 <rogier777@gmail.com>
Sun, 11 Dec 2016 18:49:49 +0000 (19:49 +0100)
committerest31 <est31@users.noreply.github.com>
Sun, 11 Dec 2016 18:49:49 +0000 (19:49 +0100)
Fixes #4878

Also remove an artificial viewing range reduction that
(presumably) was added to compensate for miscomputed
viewing ranges, and that doesn't seem to be needed any
more (thanks to lhofhansl).

src/client.cpp
src/game.cpp
src/network/networkprotocol.h

index e9d273c695c6ce349fb585ba6ec978516c5512c1..7e88e5562136ac4691751fe72641f332f038c9ab 100644 (file)
@@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include <iostream>
 #include <algorithm>
 #include <sstream>
+#include <cmath>
 #include <IFileSystem.h>
 #include "threading/mutex_auto_lock.h"
 #include "util/auth.h"
@@ -939,7 +940,7 @@ void writePlayerPos(LocalPlayer *myplayer, ClientMap *clientMap, NetworkPacket *
        u32 keyPressed   = myplayer->keyPressed;
        // scaled by 80, so that pi can fit into a u8
        u8 fov           = clientMap->getCameraFov() * 80;
-       u8 wanted_range  = clientMap->getControl().wanted_range / MAP_BLOCKSIZE;
+       u8 wanted_range  = std::ceil(clientMap->getControl().wanted_range / MAP_BLOCKSIZE);
 
        v3s32 position(pf.X, pf.Y, pf.Z);
        v3s32 speed(sf.X, sf.Y, sf.Z);
@@ -952,7 +953,7 @@ void writePlayerPos(LocalPlayer *myplayer, ClientMap *clientMap, NetworkPacket *
                [12+12+4] s32 yaw*100
                [12+12+4+4] u32 keyPressed
                [12+12+4+4+4] u8 fov*80
-               [12+12+4+4+4+1] u8 wanted_range / MAP_BLOCKSIZE
+               [12+12+4+4+4+1] u8 ceil(wanted_range / MAP_BLOCKSIZE)
        */
        *pkt << position << speed << pitch << yaw << keyPressed;
        *pkt << fov << wanted_range;
index cc6e5a0e352cf8fc9016bae48341c056f702c760..18b28c142763591316dfb8cd0839eefdeddfd9b4 100644 (file)
@@ -4214,7 +4214,7 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats,
        if (draw_control->range_all) {
                runData->fog_range = 100000 * BS;
        } else {
-               runData->fog_range = 0.9 * draw_control->wanted_range * BS;
+               runData->fog_range = draw_control->wanted_range * BS;
        }
 
        /*
index c9919e1c4828c7841216a23787b640cb84be0adf..018b392b63b9134ff0ff00f39d0d774f931f6d64 100644 (file)
@@ -652,7 +652,7 @@ enum ToServerCommand
                [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
+               [2+12+12+4+4+4+1] u8 ceil(wanted_range / MAP_BLOCKSIZE)
        */
 
        TOSERVER_GOTBLOCKS = 0x24,