X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fplayer.cpp;h=6608f8c48dc836242c3e7284ef48e3d6b7cc2311;hb=6e843b1780f62f45b7021bd8c38181aa211588ee;hp=7dd80849e27b5d5a54f277a2ca5ab9b1d76ee83c;hpb=a705cb038b55f5d7634c646c134abaa7d16aee2b;p=supertux.git diff --git a/src/player.cpp b/src/player.cpp index 7dd80849e..6608f8c48 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -40,13 +40,18 @@ #include "gameloop.h" #include "trigger/trigger_base.h" -// behavior definitions: -#define TILES_FOR_BUTTJUMP 3 -// animation times (in ms): -#define SHOOTING_TIME .150 - -// time before idle animation starts -#define IDLE_TIME 2.500 +static const int TILES_FOR_BUTTJUMP = 3; +static const float SHOOTING_TIME = .150; +/// time before idle animation starts +static const float IDLE_TIME = 2.5; + +static const float WALK_ACCELERATION_X = 300; +static const float RUN_ACCELERATION_X = 400; +static const float SKID_XM = 200; +static const float SKID_TIME = .3; +static const float MAX_WALK_XM = 230; +static const float MAX_RUN_XM = 320; +static const float WALK_SPEED = 100; // growing animation Surface* growingtux_left[GROWING_FRAMES]; @@ -131,7 +136,7 @@ Player::init() { holding_something = false; - bbox.set_size(32, 32); + bbox.set_size(31.8, 31.8); size = SMALL; got_power = NONE_POWER; @@ -388,6 +393,14 @@ Player::handle_horizontal_input() } #endif + // extend/shrink tux collision rectangle so that we fall through/walk over 1 + // tile holes + if(fabsf(vx) > MAX_WALK_XM) { + bbox.set_width(33); + } else { + bbox.set_width(31.8); + } + physic.set_velocity(vx, vy); physic.set_acceleration(ax, ay); } @@ -660,13 +673,13 @@ Player::handle_input() { duck = true; bbox.move(Vector(0, 32)); - bbox.set_height(32); + bbox.set_height(31.8); } else if(input.down == UP && size == BIG && duck) { // try if we can really unduck bbox.move(Vector(0, -32)); - bbox.set_height(64); + bbox.set_height(63.8); duck = false; // FIXME #if 0 @@ -676,7 +689,7 @@ Player::handle_input() } else { // undo the ducking changes bbox.move(Vector(0, 32)); - bbox.set_height(32); + bbox.set_height(31.8); } #endif } @@ -689,7 +702,7 @@ Player::grow(bool animate) return; size = BIG; - bbox.set_height(64); + bbox.set_height(63.8); bbox.move(Vector(0, -32)); if(animate) @@ -857,10 +870,6 @@ Player::draw(DrawingContext& context) HitResponse Player::collision(GameObject& other, const CollisionHit& hit) { - if(dying) { - return FORCE_MOVE; - } - if(other.get_flags() & FLAG_SOLID) { if(hit.normal.y < 0) { // landed on floor? if (physic.get_velocity_y() < 0) @@ -920,7 +929,7 @@ Player::kill(HurtMode mode) growing_timer.start(GROWING_TIME); safe_timer.start(TUX_SAFE_TIME + GROWING_TIME); size = SMALL; - bbox.set_height(32); + bbox.set_height(31.8); duck = false; } } @@ -932,6 +941,7 @@ Player::kill(HurtMode mode) --player_status.lives; dying = DYING_SQUISHED; dying_timer.start(3.0); + flags |= FLAG_NO_COLLDET; } } @@ -941,7 +951,7 @@ Player::remove_powerups() { got_power = NONE_POWER; size = SMALL; - bbox.set_height(32); + bbox.set_height(31.8); } void