- typo fix
[supertux.git] / src / player.cpp
index c04bd03..9d06c18 100644 (file)
@@ -18,6 +18,7 @@
 //  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 #include <math.h>
+#include <iostream>
 #include <cassert>
 #include "gameloop.h"
 #include "globals.h"
@@ -183,6 +184,14 @@ Player::action(double frame_ratio)
 
       collision_swept_object_map(&old_base, &base);
 
+      if (!invincible_timer.started()
+          && (isspike(base.x, base.y) || isspike(base.x + base.width, base.y)
+          ||  isspike(base.x, base.y + base.height)
+          ||  isspike(base.x + base.width, base.y + base.height)))
+      {
+         kill(SHRINK);
+      }
+
       // Don't accelerate Tux if he is running against a wall
       if (target.x != base.x)
         {
@@ -699,19 +708,43 @@ Player::collision(void* p_c_object, int c_object)
     case CO_TRAMPOLINE:
       ptramp_c = (Trampoline*) p_c_object;
       
-      if (physic.get_velocity_x() > 0) // RIGHT
+      // Pick up trampoline
+      if (ptramp_c->mode != Trampoline::M_HELD && input.fire == DOWN && !holding_something && on_ground())
       {
-        physic.set_velocity_x(0);
-        base.x = ptramp_c->base.x - base.width;
+        holding_something = true;
+        ptramp_c->mode = Trampoline::M_HELD;
+        ptramp_c->base.y -= 8;
       }
-      else if (physic.get_velocity_x() < 0) // LEFT
+      // Set down trampoline
+      else if (ptramp_c->mode == Trampoline::M_HELD && input.fire != DOWN)
       {
-        physic.set_velocity_x(0);
-        base.x = ptramp_c->base.x + ptramp_c->base.width;
+        holding_something = false;
+        ptramp_c->mode = Trampoline::M_NORMAL;
+        ptramp_c->base.y += 8;
+        ptramp_c->physic.set_velocity(physic.get_velocity_x(), physic.get_velocity_y());
+
+        //if (dir == RIGHT)
+        //  ptramp_c->base.x = base.x + base.width+1;
+        //else /* LEFT */
+        //  ptramp_c->base.x = base.x - base.width-1;
       }
-      else
+/*
+      // Don't let tux walk through trampoline
+      else if (ptramp_c->mode != Trampoline::M_HELD && on_ground())
       {
+        if (physic.get_velocity_x() > 0) // RIGHT
+        {
+          physic.set_velocity_x(0);
+          base.x = ptramp_c->base.x - base.width;
+        }
+        else if (physic.get_velocity_x() < 0) // LEFT
+        {
+          physic.set_velocity_x(0);
+          base.x = ptramp_c->base.x + ptramp_c->base.width;
+        }
       }
+*/
+
       break;
 
     default:
@@ -763,7 +796,7 @@ Player::is_dying()
 
 bool Player::is_dead()
 {
-  if(base.y > screen->h || base.x < scroll_x - AUTOSCROLL_DEAD_INTERVAL)  // last condition can happen in auto-scrolling
+  if(base.y > World::current()->get_level()->height * /*TILE_HEIGHT*/ 32 || base.x < scroll_x - AUTOSCROLL_DEAD_INTERVAL)  // last condition can happen in auto-scrolling
     return true;
   else
     return false;
@@ -789,7 +822,7 @@ Player::check_bounds(bool back_scrolling, bool hor_autoscroll)
     }
 
   /* Keep in-bounds, vertically: */
-  if (base.y > screen->h)
+  if (base.y > World::current()->get_level()->height * /*TILE_HEIGHT*/ 32)
     {
       kill(KILL);
     }