coins_at_start(),
bonus_at_start(),
max_fire_bullets_at_start(),
- max_ice_bullets_at_start()
+ max_ice_bullets_at_start(),
+ active(false)
{
if (restart_level() != 0)
throw std::runtime_error ("Initializing the level failed.");
}
int
-GameSession::restart_level()
+GameSession::restart_level(bool after_death)
{
PlayerStatus* currentStatus = m_savegame.get_player_status();
coins_at_start = currentStatus->coins;
ScreenManager::current()->pop_screen();
return (-1);
}
-
- SoundManager::current()->stop_music();
- currentsector->play_music(LEVEL_MUSIC);
+ if(after_death == true) {
+ currentsector->resume_music();
+ }
+ else {
+ SoundManager::current()->stop_music();
+ currentsector->play_music(LEVEL_MUSIC);
+ }
if(capture_file != "") {
int newSeed=0; // next run uses a new seed
speed_before_pause = ScreenManager::current()->get_speed();
ScreenManager::current()->set_speed(0);
MenuManager::instance().set_menu(MenuStorage::GAME_MENU);
+ SoundManager::current()->pause_music();
game_pause = true;
}
currentStatus->max_ice_bullets = max_ice_bullets_at_start;
}
+bool
+GameSession::is_active() const
+{
+ return !game_pause && active && !end_sequence;
+}
+
void
GameSession::set_editmode(bool edit_mode_)
{
if(end_sequence && end_sequence->is_done()) {
finish(true);
} else if (!end_sequence && tux->is_dead()) {
- restart_level();
+ restart_level(true);
}
}
int total_stats_to_be_collected = level->stats.total_coins + level->stats.total_badguys + level->stats.total_secrets;
if ((!levelintro_shown) && (total_stats_to_be_collected > 0)) {
levelintro_shown = true;
+ active = false;
ScreenManager::current()->push_screen(std::unique_ptr<Screen>(new LevelIntro(level.get(), best_level_statistics)));
}
}
void
GameSession::update(float elapsed_time)
{
+ // Set active flag
+ if(!active)
+ {
+ active = true;
+ }
// handle controller
- if(InputManager::current()->get_controller()->pressed(Controller::PAUSE_MENU))
+ if(InputManager::current()->get_controller()->pressed(Controller::ESCAPE) ||
+ InputManager::current()->get_controller()->pressed(Controller::START))
{
on_escape_press();
}
// Unpause the game if the menu has been closed
if (game_pause && !MenuManager::instance().is_active()) {
ScreenManager::current()->set_speed(speed_before_pause);
+ SoundManager::current()->resume_music();
game_pause = false;
}
}
}
+ if(currentsector == NULL)
+ return;
+
// update sounds
- if (currentsector && currentsector->camera) SoundManager::current()->set_listener_position(currentsector->camera->get_center());
+ if (currentsector->camera) SoundManager::current()->set_listener_position(currentsector->camera->get_center());
/* Handle music: */
if (end_sequence)
if (sequencename == "endsequence") {
if (currentsector->get_players()[0]->get_physic().get_velocity_x() < 0) {
- end_sequence = new EndSequenceWalkLeft();
+ end_sequence = std::make_shared<EndSequenceWalkLeft>();
} else {
- end_sequence = new EndSequenceWalkRight();
+ end_sequence = std::make_shared<EndSequenceWalkRight>();
}
} else if (sequencename == "fireworks") {
- end_sequence = new EndSequenceFireworks();
+ end_sequence = std::make_shared<EndSequenceFireworks>();
} else {
log_warning << "Unknown sequence '" << sequencename << "'. Ignoring." << std::endl;
return;
currentsector->player->set_winning();
// Stop all clocks.
- for(std::vector<GameObject*>::iterator i = currentsector->gameobjects.begin();
+ for(auto i = currentsector->gameobjects.begin();
i != currentsector->gameobjects.end(); ++i)
{
- GameObject* obj = *i;
+ GameObjectPtr obj = *i;
- LevelTime* lt = dynamic_cast<LevelTime*> (obj);
+ auto lt = std::dynamic_pointer_cast<LevelTime>(obj);
if(lt)
lt->stop();
}