X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fobject%2Fbullet.cpp;h=c761735d5be41e29960e2b4390db9858b7132c46;hb=ca967dcf4ee89f99880355be00782d1cd047be6a;hp=ef7b52f17845da6f5744e5bab7acc9ce5d9bf54c;hpb=2892ebda09d24c977547159e34abf0244884b89e;p=supertux.git diff --git a/src/object/bullet.cpp b/src/object/bullet.cpp index ef7b52f17..c761735d5 100644 --- a/src/object/bullet.cpp +++ b/src/object/bullet.cpp @@ -33,17 +33,21 @@ namespace { const float BULLET_STARTING_YM = 0; } -Bullet::Bullet(const Vector& pos, float xm, int dir) - : life_count(3) +Bullet::Bullet(const Vector& pos, float xm, int dir, BonusType type) + : life_count(3), type(type) { - sprite.reset(sprite_manager->create("images/objects/bullets/firebullet.sprite")); - - bbox.set_pos(pos); - bbox.set_size(sprite->get_current_hitbox_width(), sprite->get_current_hitbox_height()); - float speed = dir == RIGHT ? BULLET_XM : -BULLET_XM; physic.set_velocity_x(speed + xm); - physic.set_velocity_y(BULLET_STARTING_YM); + + if(type == FIRE_BONUS) { + sprite.reset(sprite_manager->create("images/objects/bullets/firebullet.sprite")); + } else if(type == ICE_BONUS) { + life_count = 10; + sprite.reset(sprite_manager->create("images/objects/bullets/icebullet.sprite")); + } + + bbox.set_pos(pos); + bbox.set_size(sprite->get_current_hitbox_width(), sprite->get_current_hitbox_height()); } Bullet::~Bullet() @@ -53,14 +57,7 @@ Bullet::~Bullet() void Bullet::update(float elapsed_time) { - // @not completely framerate independant :-/ - physic.set_velocity_y(physic.get_velocity_y() + 50 * elapsed_time); - - if(physic.get_velocity_y() > 900) - physic.set_velocity_y(900); - else if(physic.get_velocity_y() < -900) - physic.set_velocity_y(-900); - + // remove bullet when it's offscreen float scroll_x = Sector::current()->camera->get_translation().x; float scroll_y = @@ -90,14 +87,22 @@ Bullet::collision_solid(const CollisionHit& hit) physic.set_velocity_y(-physic.get_velocity_y()); life_count--; } else if(hit.left || hit.right) { - remove_me(); + if(type == ICE_BONUS) { + physic.set_velocity_x(-physic.get_velocity_x()); + life_count--; + } else + remove_me(); } } +void +Bullet::ricochet(GameObject& , const CollisionHit& hit) +{ + collision_solid(hit); +} + HitResponse Bullet::collision(GameObject& , const CollisionHit& ) { return FORCE_MOVE; } - -