From: Matthias Braun Date: Tue, 18 May 2004 16:43:37 +0000 (+0000) Subject: fixed butt jump to work even when up-key is not pressed, added a little jump after... X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=821b1cb4e9c12726a43a685fe592f1b2ff9e2a9e;p=supertux.git fixed butt jump to work even when up-key is not pressed, added a little jump after breaking a brick. The thing still has problems with breaking the correct fix, as the used position is not the actual one, but the target position for the next frame, so you can break some bricks that aren't reachable normally SVN-Revision: 1251 --- diff --git a/src/player.cpp b/src/player.cpp index e0fd00397..e522782f4 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -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); diff --git a/src/world.cpp b/src/world.cpp index f0dbf04cb..2eca737b5 100644 --- a/src/world.cpp +++ b/src/world.cpp @@ -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: */ diff --git a/src/world.h b/src/world.h index b2ce9c7bb..168059a64 100644 --- a/src/world.h +++ b/src/world.h @@ -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);