From 1d4f04476ae2c9e1530e48bb8881955d4a9d7238 Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Mon, 22 Nov 2004 21:35:04 +0000 Subject: [PATCH] fix tux jumping always full height SVN-Revision: 2138 --- TODO | 2 +- src/gameobjs.cpp | 4 +- src/gameobjs.h | 2 +- src/object/fireworks.cpp | 7 +- src/player.cpp | 176 +++++------------------------------------------ src/player.h | 3 - src/sector.cpp | 7 -- src/sector.h | 3 - src/tilemap.cpp | 2 +- 9 files changed, 26 insertions(+), 180 deletions(-) diff --git a/TODO b/TODO index e1b401eca..522831766 100644 --- a/TODO +++ b/TODO @@ -84,7 +84,7 @@ L: low priority * check if unducking is actually possible or if something is in the way * fix flapping ** having a star doesn't kill enemies - ok - * tux always jumps to full height at the moment + * tux always jumps to full height at the moment - ok * invisble blocks are visible and make the game crash when bumped * reimplement spikes as objects * what to do when stuck under tiles (after using duck-sliding) diff --git a/src/gameobjs.cpp b/src/gameobjs.cpp index 6e7b552ac..3201eb285 100644 --- a/src/gameobjs.cpp +++ b/src/gameobjs.cpp @@ -452,7 +452,9 @@ SmokeCloud::draw(DrawingContext& context) img_smoke_cloud->draw(context, position, LAYER_OBJECTS+1); } -Particles::Particles(const Vector& epicenter, int min_angle, int max_angle, const Vector& initial_velocity, const Vector& acceleration, int number, Color color_, int size_, int life_time, int drawing_layer_) +Particles::Particles(const Vector& epicenter, int min_angle, int max_angle, + const Vector& initial_velocity, const Vector& acceleration, int number, + Color color_, int size_, float life_time, int drawing_layer_) : accel(acceleration), color(color_), size(size_), drawing_layer(drawing_layer_) { if(life_time == 0) { diff --git a/src/gameobjs.h b/src/gameobjs.h index bb4168f64..5ebbe07df 100644 --- a/src/gameobjs.h +++ b/src/gameobjs.h @@ -130,7 +130,7 @@ class Particles : public GameObject public: Particles(const Vector& epicenter, int min_angle, int max_angle, const Vector& initial_velocity, const Vector& acceleration, - int number, Color color, int size, int life_time, int drawing_layer); + int number, Color color, int size, float life_time, int drawing_layer); ~Particles(); virtual void action(float elapsed_time); diff --git a/src/object/fireworks.cpp b/src/object/fireworks.cpp index e6369e1a5..a6ff565f8 100644 --- a/src/object/fireworks.cpp +++ b/src/object/fireworks.cpp @@ -4,6 +4,7 @@ #include "resources.h" #include "sector.h" #include "camera.h" +#include "gameobjs.h" #include "app/globals.h" #include "video/drawing_context.h" #include "audio/sound_manager.h" @@ -30,9 +31,9 @@ Fireworks::action(float ) int red = rand() % 255; int green = rand() % red; - sector->add_particles(pos, 0, 360, Vector(140, 140), - Vector(0, 0), 45, Color(red, green, 0), 3, 1300, - LAYER_FOREGROUND1+1); + sector->add_object(new Particles(pos, 0, 360, Vector(140, 140), + Vector(0, 0), 45, Color(red, green, 0), 3, 1.3, + LAYER_FOREGROUND1+1)); SoundManager::get()->play_sound(IDToSound(SND_FIREWORKS)); timer.start(((float) rand() / RAND_MAX) + .5); } diff --git a/src/player.cpp b/src/player.cpp index fa9d84a66..edbdce81b 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -175,13 +175,8 @@ Player::init() on_ground_flag = false; - frame_main = 0; - frame_ = 0; - player_input_init(&input); - frame_timer.start(.025, true); - physic.reset(); } @@ -363,12 +358,13 @@ Player::handle_horizontal_input() skidding_timer.start(SKID_TIME); SoundManager::get()->play_sound(IDToSound(SND_SKID)); // dust some partcles - Sector::current()->add_particles( - Vector(bbox.p1.x + (dir == RIGHT ? bbox.get_width() : 0), + Sector::current()->add_object( + new Particles( + Vector(bbox.p1.x + (dir == RIGHT ? bbox.get_width() : 0), bbox.p2.y), dir == RIGHT ? 270+20 : 90-40, dir == RIGHT ? 270+40 : 90-20, - Vector(280,-260), Vector(0,0.030), 3, Color(100,100,100), 3, 800, - LAYER_OBJECTS+1); + Vector(280,-260), Vector(0,0.030), 3, Color(100,100,100), 3, .8, + LAYER_OBJECTS+1)); ax *= 2.5; } @@ -423,6 +419,17 @@ Player::handle_vertical_input() fall_mode = JUMPING; } + if(on_ground()) { /* Make sure jumping is off. */ + jumping = false; + flapping = false; + falling_from_flap = false; + if (flapping_timer.started()) { + flapping_timer.start(0); + } + + physic.set_acceleration_y(0); //for flapping + } + // Press jump key if(input.jump == DOWN && can_jump && on_ground()) { @@ -456,7 +463,6 @@ Player::handle_vertical_input() } if (jumping && physic.get_velocity_y() > 0) { - printf("jumpend.\n"); jumping = false; physic.set_velocity_y(0); } @@ -638,18 +644,6 @@ Player::handle_vertical_input() } #endif - if(on_ground()) /* Make sure jumping is off. */ - { - jumping = false; - flapping = false; - falling_from_flap = false; - if (flapping_timer.started()) { - flapping_timer.start(0); - } - - physic.set_acceleration_y(0); //for flapping - } - input.old_jump = input.jump; } @@ -673,28 +667,6 @@ Player::handle_input() input.old_fire = DOWN; } -#if 0 - /* tux animations: */ - if(frame_timer.check()) { - if (input.right == UP && input.left == UP) - { - frame_main = 1; - frame_ = 1; - } - else - { - if ((input.fire == DOWN && (global_frame_counter % 2) == 0) || - (global_frame_counter % 4) == 0) - frame_main = (frame_main + 1) % 4; - - frame_ = frame_main; - - if (frame_ == 3) - frame_ = 1; - } - } -#endif - /* Duck! */ if (input.down == DOWN && size == BIG && !duck && physic.get_velocity_y() == 0 && on_ground()) @@ -930,122 +902,6 @@ Player::collision(GameObject& other, const CollisionHit& hit) return FORCE_MOVE; } -#if 0 -void -Player::collision(void* p_c_object, int c_object) -{ - //BadGuy* pbad_c = NULL; - //Trampoline* ptramp_c = NULL; - //FlyingPlatform* pplatform_c = NULL; - - switch (c_object) - { - case CO_BADGUY: - pbad_c = (BadGuy*) p_c_object; - - /* Hurt player if he touches a badguy */ - if (!pbad_c->dying && !dying && - !safe_timer.started() && - pbad_c->mode != BadGuy::HELD) - { - if (pbad_c->mode == BadGuy::FLAT && input.fire == DOWN - && !holding_something) - { - holding_something = true; - pbad_c->mode = BadGuy::HELD; - pbad_c->base.y-=8; - } - else if (pbad_c->mode == BadGuy::FLAT) - { - // Don't get hurt if we're kicking a flat badguy! - } - else if (pbad_c->mode == BadGuy::KICK) - { - /* Hurt if you get hit by kicked laptop: */ - if (!invincible_timer.started()) - { - kill(SHRINK); - } - else - pbad_c->kill_me(20); - } - else if (!pbad_c->frozen_timer.check() && (pbad_c->kind == BAD_MRBOMB - || pbad_c->kind == BAD_JUMPY || pbad_c->kind == BAD_FISH - || pbad_c->kind == BAD_SPIKY)) - pbad_c->kill_me(20); - else - { - if (!invincible_timer.started()) - { - kill(SHRINK); - } - else - { - pbad_c->kill_me(25); - } - } - player_status.score_multiplier++; - } - break; - - case CO_TRAMPOLINE: - ptramp_c = (Trampoline*) p_c_object; - - // Pick up trampoline - if (ptramp_c->mode != Trampoline::M_HELD && input.fire == DOWN && !holding_something && on_ground()) - { - holding_something = true; - ptramp_c->mode = Trampoline::M_HELD; - ptramp_c->base.y -= 8; - } - // Set down trampoline - else if (ptramp_c->mode == Trampoline::M_HELD && input.fire != DOWN) - { - 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; - } -/* - // 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; - case CO_FLYING_PLATFORM: - pplatform_c = (FlyingPlatform*) p_c_object; - - base.y = pplatform_c->base.y - base.height; - physic.set_velocity_x(pplatform_c->get_vel_x()); - - physic.enable_gravity(false); - can_jump = true; - fall_mode = ON_GROUND; - break; - - default: - break; - } - -} -#endif - void Player::make_invincible() { diff --git a/src/player.h b/src/player.h index 45a82bdca..bc47b133b 100644 --- a/src/player.h +++ b/src/player.h @@ -156,8 +156,6 @@ public: bool falling_from_flap; bool enable_hover; bool butt_jump; - int frame_; - int frame_main; float flapping_velocity; @@ -171,7 +169,6 @@ public: Timer2 invincible_timer; Timer2 skidding_timer; Timer2 safe_timer; - Timer2 frame_timer; Timer2 kick_timer; Timer2 shooting_timer; // used to show the arm when Tux is shooting Timer2 dying_timer; diff --git a/src/sector.cpp b/src/sector.cpp index e09742071..0e03e7606 100644 --- a/src/sector.cpp +++ b/src/sector.cpp @@ -791,13 +791,6 @@ Sector::add_smoke_cloud(const Vector& pos) return true; } -bool -Sector::add_particles(const Vector& epicenter, int min_angle, int max_angle, const Vector& initial_velocity, const Vector& acceleration, int number, Color color, int size, int life_time, int drawing_layer) -{ - add_object(new Particles(epicenter, min_angle, max_angle, initial_velocity, acceleration, number, color, size, life_time, drawing_layer)); - return true; -} - void Sector::add_floating_text(const Vector& pos, const std::string& text) { diff --git a/src/sector.h b/src/sector.h index 89270358b..05bdf41e8 100644 --- a/src/sector.h +++ b/src/sector.h @@ -106,9 +106,6 @@ public: bool add_bullet(const Vector& pos, float xm, Direction dir); bool add_smoke_cloud(const Vector& pos); - bool add_particles(const Vector& epicenter, int min_angle, int max_angle, - const Vector& initial_velocity, const Vector& acceleration, int number, - Color color, int size, int life_time, int drawing_layer); void add_floating_text(const Vector& pos, const std::string& text); /** Flip the all the sector vertically. The purpose of this is to let diff --git a/src/tilemap.cpp b/src/tilemap.cpp index b7f3c5a46..47cdeea7b 100644 --- a/src/tilemap.cpp +++ b/src/tilemap.cpp @@ -231,7 +231,7 @@ TileMap::get_tile(int x, int y) const { if(x < 0 || x >= width || y < 0 || y >= height) { #ifdef DEBUG - std::cout << "Warning: tile outside tilemap requested!\n"; + //std::cout << "Warning: tile outside tilemap requested!\n"; #endif return tilemanager->get(0); } -- 2.11.0