X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fobject%2Fbullet.cpp;h=c761735d5be41e29960e2b4390db9858b7132c46;hb=a98f7cee9f6a2593c0e1f3442800f159bad410df;hp=b6145e62126a366ad7b976ac8d40090eecb97c67;hpb=2e8c529df6c1700acec583d852da9375f1c0ccfc;p=supertux.git diff --git a/src/object/bullet.cpp b/src/object/bullet.cpp index b6145e621..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")); + float speed = dir == RIGHT ? BULLET_XM : -BULLET_XM; + physic.set_velocity_x(speed + xm); + + 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()); - - float speed = dir == RIGHT ? BULLET_XM : -BULLET_XM; - physic.set_velocity_x(speed + xm); - physic.set_velocity_y(BULLET_STARTING_YM); } Bullet::~Bullet() @@ -83,10 +87,20 @@ 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& ) {