/* Shoot! */
if (controller->pressed(Controller::ACTION) && (player_status->bonus == FIRE_BONUS || player_status->bonus == ICE_BONUS)) {
- if(Sector::current()->add_bullet(
- get_pos() + ((dir == LEFT)? Vector(0, bbox.get_height()/2)
- : Vector(32, bbox.get_height()/2)),
- player_status,
- physic.get_velocity_x(), dir))
+ if((player_status->bonus == FIRE_BONUS &&
+ Sector::current()->get_active_bullets() < player_status->max_fire_bullets) ||
+ (player_status->bonus == ICE_BONUS &&
+ Sector::current()->get_active_bullets() < player_status->max_ice_bullets))
+ {
+ Vector pos = get_pos() + ((dir == LEFT)? Vector(0, bbox.get_height()/2) : Vector(32, bbox.get_height()/2));
+ auto new_bullet = std::make_shared<Bullet>(pos, physic.get_velocity_x(), dir, player_status->bonus);
+ Sector::current()->add_object(new_bullet);
+
+ SoundManager::current()->play("sounds/shoot.wav");
shooting_timer.start(SHOOTING_TIME);
+ }
}
/* Duck or Standup! */
}
bool
-Sector::add_bullet(const Vector& pos, const PlayerStatus* player_status, float xm, Direction dir)
-{
- // TODO remove this function and move these checks elsewhere...
- if((player_status->bonus == FIRE_BONUS &&
- (int)bullets.size() >= player_status->max_fire_bullets) ||
- (player_status->bonus == ICE_BONUS &&
- (int)bullets.size() >= player_status->max_ice_bullets))
- return false;
- auto new_bullet = std::make_shared<Bullet>(pos, xm, dir, player_status->bonus);
- add_object(new_bullet);
-
- SoundManager::current()->play("sounds/shoot.wav");
-
- return true;
-}
-
-bool
Sector::add_smoke_cloud(const Vector& pos)
{
add_object(std::make_shared<SmokeCloud>(pos));
void play_music(MusicType musictype);
MusicType get_music_type();
- bool add_bullet(const Vector& pos, const PlayerStatus* player_status, float xm, Direction dir);
+ int get_active_bullets()
+ { return (int)bullets.size(); }
bool add_smoke_cloud(const Vector& pos);
/** get currently activated sector. */