// 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"
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)
{
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:
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;
}
/* Keep in-bounds, vertically: */
- if (base.y > screen->h)
+ if (base.y > World::current()->get_level()->height * /*TILE_HEIGHT*/ 32)
{
kill(KILL);
}