fixed butt jump to work even when up-key is not pressed, added a little jump after...
authorMatthias Braun <matze@braunis.de>
Tue, 18 May 2004 16:43:37 +0000 (16:43 +0000)
committerMatthias Braun <matze@braunis.de>
Tue, 18 May 2004 16:43:37 +0000 (16:43 +0000)
SVN-Revision: 1251

src/player.cpp
src/world.cpp
src/world.h

index e0fd003..e522782 100644 (file)
@@ -390,32 +390,27 @@ void
 Player::handle_vertical_input()
 {
   // Press jump key
-  if(input.up == DOWN && can_jump)
+  if(input.up == DOWN && can_jump && on_ground())
     {
-      if (on_ground())
-        {
-          // jump higher if we are running
-          if (fabs(physic.get_velocity_x()) > MAX_WALK_XM)
-            physic.set_velocity_y(5.8);
-          else
-            physic.set_velocity_y(5.2);
+      // jump higher if we are running
+      if (fabs(physic.get_velocity_x()) > MAX_WALK_XM)
+        physic.set_velocity_y(5.8);
+      else
+        physic.set_velocity_y(5.2);
 
-          --base.y;
-          jumping = true;
-          can_jump = false;
-          if (size == SMALL)
-            play_sound(sounds[SND_JUMP], SOUND_CENTER_SPEAKER);
-          else
-            play_sound(sounds[SND_BIGJUMP], SOUND_CENTER_SPEAKER);
-        }
+      --base.y;
+      jumping = true;
+      can_jump = false;
+      if (size == SMALL)
+        play_sound(sounds[SND_JUMP], SOUND_CENTER_SPEAKER);
+      else
+        play_sound(sounds[SND_BIGJUMP], SOUND_CENTER_SPEAKER);
     }
   // Let go of jump key
-  else if(input.up == UP && jumping)
+  else if(input.up == UP && jumping && physic.get_velocity_y() > 0)
     {
       jumping = false;
-      if(physic.get_velocity_y() > 0) {
-        physic.set_velocity_y(0);
-      }
+      physic.set_velocity_y(0);
     }
 
   if (input.down == DOWN && !on_ground() && !duck)
@@ -424,15 +419,15 @@ Player::handle_vertical_input()
     butt_jump = false;
   if (input.down == DOWN && butt_jump && on_ground())
   {
-    if (isbrick(base.x, base.y + base.height))
-      World::current()->trybreakbrick(base.x, base.y + base.height, false);
-    if (isbrick(base.x + base.width, base.y + base.height))
-      World::current()->trybreakbrick(base.x + base.width, base.y + base.height, false);
-
+    if(World::current()->trybreakbrick(base.x, base.y + base.height, false)
+      || World::current()->trybreakbrick(
+          base.x + base.width, base.y + base.height, false)) {
+        // make tux jumping a little bit again after breaking the bricks
+        physic.set_velocity_y(2);
+    }
     butt_jump = false;
   }
 
-
   if ( (issolid(base.x + base.width / 2, base.y + base.height + 64) ||
         issolid(base.x + 1, base.y + base.height + 64) ||
         issolid(base.x + base.width - 1, base.y + base.height + 64))
@@ -457,13 +452,9 @@ Player::handle_input()
 
   if (on_ground() && input.up == UP)
     can_jump = true;
-  if (input.up == DOWN || (input.up == UP && jumping))
-    {
-      handle_vertical_input();
-    }
+  handle_vertical_input();
 
   /* Shoot! */
-
   if (input.fire == DOWN && input.old_fire == UP && got_power != NONE_POWER)
     {
       World::current()->add_bullet(base.x, base.y, physic.get_velocity_x(), dir);
index f0dbf04..2eca737 100644 (file)
@@ -643,7 +643,7 @@ World::get_music_type()
 }
 
 /* Break a brick: */
-void
+bool
 World::trybreakbrick(float x, float y, bool small)
 {
   Level* plevel = get_level();
@@ -677,6 +677,7 @@ World::trybreakbrick(float x, float y, bool small)
           play_sound(sounds[SND_DISTRO], SOUND_CENTER_SPEAKER);
           player_status.score = player_status.score + SCORE_DISTRO;
           player_status.distros++;
+          return true;
         }
       else if (!small)
         {
@@ -691,8 +692,12 @@ World::trybreakbrick(float x, float y, bool small)
           /* Get some score: */
           play_sound(sounds[SND_BRICK], SOUND_CENTER_SPEAKER);
           player_status.score = player_status.score + SCORE_BRICK;
+          
+          return true;
         }
     }
+
+  return false;
 }
 
 /* Empty a box: */
index b2ce9c7..168059a 100644 (file)
@@ -111,7 +111,7 @@ public:
   void trygrabdistro(float x, float y, int bounciness);
 
   /** Try to break the brick at the given coordinates */
-  void trybreakbrick(float x, float y, bool small);
+  bool trybreakbrick(float x, float y, bool small);
 
   /** Try to get the content out of a bonus box, thus emptying it */
   void tryemptybox(float x, float y, Direction col_side);