aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/environment.cpp4
-rw-r--r--src/player.cpp27
2 files changed, 16 insertions, 15 deletions
diff --git a/src/environment.cpp b/src/environment.cpp
index e9b94f3fa..680d209fc 100644
--- a/src/environment.cpp
+++ b/src/environment.cpp
@@ -1511,6 +1511,8 @@ void ClientEnvironment::step(float dtime)
/*
Get the speed the player is going
*/
+ bool is_climbing = lplayer->is_climbing;
+
f32 player_speed = 0.001; // just some small value
player_speed = lplayer->getSpeed().getLength();
@@ -1568,7 +1570,7 @@ void ClientEnvironment::step(float dtime)
v3f lplayerpos = lplayer->getPosition();
// Apply physics
- if(free_move == false)
+ if(free_move == false && is_climbing == false)
{
// Gravity
v3f speed = lplayer->getSpeed();
diff --git a/src/player.cpp b/src/player.cpp
index 270f795b5..be478e869 100644
--- a/src/player.cpp
+++ b/src/player.cpp
@@ -382,8 +382,8 @@ void LocalPlayer::move(f32 dtime, Map &map, f32 pos_max_d,
try {
v3s16 pp = floatToInt(position + v3f(0,0.5*BS,0), BS);
v3s16 pp2 = floatToInt(position + v3f(0,-0.2*BS,0), BS);
- is_climbing = (content_features(map.getNode(pp).getContent()).climbable ||
- content_features(map.getNode(pp2).getContent()).climbable);
+ is_climbing = ((content_features(map.getNode(pp).getContent()).climbable ||
+ content_features(map.getNode(pp2).getContent()).climbable) && !free_move);
}
catch(InvalidPositionException &e)
{
@@ -738,7 +738,7 @@ void LocalPlayer::applyControl(float dtime)
bool fast_move = g_settings.getBool("fast_move");
bool continuous_forward = g_settings.getBool("continuous_forward");
- if(free_move)
+ if(free_move || is_climbing)
{
v3f speed = getSpeed();
speed.Y = 0;
@@ -765,6 +765,12 @@ void LocalPlayer::applyControl(float dtime)
speed.Y = -walkspeed_max;
setSpeed(speed);
}
+ else if(is_climbing)
+ {
+ v3f speed = getSpeed();
+ speed.Y = -3*BS;
+ setSpeed(speed);
+ }
else
{
// If not free movement but fast is allowed, aux1 is
@@ -827,17 +833,10 @@ void LocalPlayer::applyControl(float dtime)
setSpeed(speed);
swimming_up = true;
}
- }
-
- if (is_climbing) {
- if (control.up || control.left || control.right || control.down) {
- v3f speed = getSpeed();
- speed.Y = 2.5*BS;
- setSpeed(speed);
- }
- else {
- v3f speed = getSpeed();
- speed.Y = -2*BS;
+ else if(is_climbing)
+ {
+ v3f speed = getSpeed();
+ speed.Y = 3*BS;
setSpeed(speed);
}
}