aboutsummaryrefslogtreecommitdiff
path: root/src/client
diff options
context:
space:
mode:
authorElias Fleckenstein <eliasfleckenstein@web.de>2021-12-12 16:08:12 +0100
committerElias Fleckenstein <eliasfleckenstein@web.de>2021-12-12 16:08:12 +0100
commit659f470565efff7a8789d1cc8b1cd18ad7d15ad0 (patch)
tree591a6cb0e96c2b70917c031b670a8103a776a15b /src/client
parent76aa6103e39533d70f3b46e6df902dc6b4dd4104 (diff)
downloadminetest-659f470565efff7a8789d1cc8b1cd18ad7d15ad0.tar.xz
Add correct gravity calculation
Diffstat (limited to 'src/client')
-rw-r--r--src/client/clientenvironment.cpp7
-rw-r--r--src/client/content_cao.cpp3
-rw-r--r--src/client/localplayer.h1
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,