diff options
| author | Elias Fleckenstein <eliasfleckenstein@web.de> | 2021-12-12 16:08:12 +0100 |
|---|---|---|
| committer | Elias Fleckenstein <eliasfleckenstein@web.de> | 2021-12-12 16:08:12 +0100 |
| commit | 659f470565efff7a8789d1cc8b1cd18ad7d15ad0 (patch) | |
| tree | 591a6cb0e96c2b70917c031b670a8103a776a15b /src/client | |
| parent | 76aa6103e39533d70f3b46e6df902dc6b4dd4104 (diff) | |
| download | minetest-659f470565efff7a8789d1cc8b1cd18ad7d15ad0.tar.xz | |
Add correct gravity calculation
Diffstat (limited to 'src/client')
| -rw-r--r-- | src/client/clientenvironment.cpp | 7 | ||||
| -rw-r--r-- | src/client/content_cao.cpp | 3 | ||||
| -rw-r--r-- | src/client/localplayer.h | 1 |
3 files changed, 10 insertions, 1 deletions
diff --git a/src/client/clientenvironment.cpp b/src/client/clientenvironment.cpp index 448af36c6..6c7ea6578 100644 --- a/src/client/clientenvironment.cpp +++ b/src/client/clientenvironment.cpp @@ -197,6 +197,8 @@ void ClientEnvironment::step(float dtime) if (!free_move) { // Gravity v3f speed = lplayer->getSpeed(); + v3f old_speed = speed; + if (!is_climbing && !lplayer->in_liquid) speed.Y -= lplayer->movement_gravity * lplayer->physics_override_gravity * dtime_part * 2.0f; @@ -233,7 +235,10 @@ void ClientEnvironment::step(float dtime) speed += d; } - lplayer->setSpeed(speed); + lplayer->setSpeed(lplayer->physics_override_new_gravity + ? (speed + old_speed) / 2.0f + : speed + ); } /* diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp index a80a3ce4e..46007a622 100644 --- a/src/client/content_cao.cpp +++ b/src/client/content_cao.cpp @@ -1771,6 +1771,8 @@ void GenericCAO::processMessage(const std::string &data) bool sneak = !readU8(is); bool sneak_glitch = !readU8(is); bool new_move = !readU8(is); + // this one is off by default + bool new_gravity = readU8(is); if(m_is_local_player) @@ -1782,6 +1784,7 @@ void GenericCAO::processMessage(const std::string &data) player->physics_override_sneak = sneak; player->physics_override_sneak_glitch = sneak_glitch; player->physics_override_new_move = new_move; + player->physics_override_new_gravity = new_gravity; } } else if (cmd == AO_CMD_SET_ANIMATION) { // TODO: change frames send as v2s32 value diff --git a/src/client/localplayer.h b/src/client/localplayer.h index 13b35ae4e..04b78298b 100644 --- a/src/client/localplayer.h +++ b/src/client/localplayer.h @@ -68,6 +68,7 @@ public: bool physics_override_sneak_glitch = false; // Temporary option for old move code bool physics_override_new_move = true; + bool physics_override_new_gravity = false; void move(f32 dtime, Environment *env, f32 pos_max_d); void move(f32 dtime, Environment *env, f32 pos_max_d, |
