disable collision detection when tux is falling down because he is dead
[supertux.git] / src / player.cpp
index 2ecaaad..cf945e4 100644 (file)
@@ -73,7 +73,7 @@ PlayerKeymap::PlayerKeymap()
   keymap.right = SDLK_RIGHT;
 
   keymap.power = SDLK_LCTRL;
-  keymap.jump  = SDLK_LALT;
+  keymap.jump  = SDLK_SPACE;
 }
 
 void player_input_init(player_input_type* pplayer_input)
@@ -91,29 +91,16 @@ void player_input_init(player_input_type* pplayer_input)
 }
 
 void
-TuxBodyParts::set_action(std::string action)
+TuxBodyParts::set_action(std::string action, int loops)
 {
   if(head != NULL)
-    head->set_action(action);
+    head->set_action(action, loops);
   if(body != NULL)
-    body->set_action(action);
+    body->set_action(action, loops);
   if(arms != NULL)
-    arms->set_action(action);
+    arms->set_action(action, loops);
   if(feet != NULL)
-    feet->set_action(action);
-}
-
-void
-TuxBodyParts::one_time_animation()
-{
-  if(head != NULL)
-    head->start_animation(1);
-  if(body != NULL)
-    body->start_animation(1);
-  if(arms != NULL)
-    arms->start_animation(1);
-  if(feet != NULL)
-    feet->start_animation(1);
+    feet->set_action(action, loops);
 }
 
 void
@@ -728,7 +715,7 @@ Player::draw(DrawingContext& context)
   else
     tux_body = big_tux;
 
-  int layer = LAYER_OBJECTS - 1;
+  int layer = LAYER_OBJECTS + 10;
 
   /* Set Tux sprite action */
   if (duck && size == BIG)
@@ -789,11 +776,9 @@ Player::draw(DrawingContext& context)
     if(size == BIG)
       {
       if(dir == LEFT)
-        tux_body->head->set_action("idle-left");
+        tux_body->head->set_action("idle-left", 1);
       else // dir == RIGHT
-        tux_body->head->set_action("idle-right");
-
-      tux_body->head->start_animation(1);
+        tux_body->head->set_action("idle-right", 1);
       }
 
     }
@@ -858,15 +843,15 @@ Player::draw(DrawingContext& context)
      && !dying)
   {
     if (size == SMALL || duck)
-      smalltux_star->draw(context, get_pos(), LAYER_OBJECTS + 2);
+      smalltux_star->draw(context, get_pos(), layer + 5);
     else
-      bigtux_star->draw(context, get_pos(), LAYER_OBJECTS + 2);
+      bigtux_star->draw(context, get_pos(), layer + 5);
   }
  
   if (debug_mode)
     context.draw_filled_rect(get_pos(),
         Vector(bbox.get_width(), bbox.get_height()),
-        Color(75,75,75, 150), LAYER_OBJECTS+1);
+        Color(75,75,75, 150), LAYER_OBJECTS+20);
 }
 
 HitResponse
@@ -882,12 +867,11 @@ Player::collision(GameObject& other, const CollisionHit& hit)
         physic.set_velocity_y(0);
       on_ground_flag = true;
     } else if(hit.normal.y > 0) { // bumped against the roof
-      physic.set_velocity_y(0);
+      physic.set_velocity_y(.1);
     }
     
-    if(hit.normal.x != 0) { // hit on the side?
-      if(hit.normal.y > 0.6) // limits the slopes we can move up...
-        physic.set_velocity_x(0);
+    if(fabsf(hit.normal.x) > .9) { // hit on the side?
+      physic.set_velocity_x(0);
     }
 
     return CONTINUE;
@@ -948,6 +932,7 @@ Player::kill(HurtMode mode)
       --player_status.lives;
       dying = DYING_SQUISHED;
       dying_timer.start(3.0);
+      flags |= FLAG_NO_COLLDET;
     }
 }
 
@@ -1010,7 +995,7 @@ Player::check_bounds(Camera* camera)
 }
 
 void
-Player::bounce(BadGuy& badguy)
+Player::bounce(BadGuy& )
 {
   //Make sure we stopped flapping
   flapping = false;