Fixing ladders again
authorMark Holmquist <marktraceur@gmail.com>
Sun, 31 Jul 2011 04:53:05 +0000 (21:53 -0700)
committerGiuseppe Bilotta <giuseppe.bilotta@gmail.com>
Mon, 1 Aug 2011 07:22:44 +0000 (09:22 +0200)
src/environment.cpp
src/player.cpp

index e9b94f3fa8928be5ee820442e39a51186f64a7d6..680d209fc2dbdf87b66e23a6f4659c0e284b8a77 100644 (file)
@@ -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();
index 270f795b51229b2ad57462515a96bc8a626f51fc..be478e8693efce74dfe42d21cb2a5bb1403e71db 100644 (file)
@@ -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);
                }
        }