From: Mark Holmquist Date: Sun, 31 Jul 2011 04:53:05 +0000 (-0700) Subject: Fixing ladders again X-Git-Url: http://81.2.79.47:8989/gitweb/?a=commitdiff_plain;h=267744a56871f6eecbb80c7999c2fcd79989fc1e;p=zefram%2Fminetest%2Fminetest_engine.git Fixing ladders again --- diff --git a/src/environment.cpp b/src/environment.cpp index e9b94f3f..680d209f 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 270f795b..be478e86 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); } }