LEVEL_RESULT campaign_controller::playmp_scenario(end_level_data &end_level) { playmp_controller playcontroller(state_.get_starting_pos(), state_, game_config_, tdata_, video_, mp_info_); LEVEL_RESULT res = playcontroller.play_scenario(state_.get_starting_pos()); //Check if the player started as mp client and changed to host if (res == LEVEL_RESULT::QUIT) { return LEVEL_RESULT::QUIT; } end_level = playcontroller.get_end_level_data_const(); if(res != LEVEL_RESULT::OBSERVER_END) { //We need to call this before linger because it prints the defeated/victory message. //(we want to see that message before entering the linger mode) show_carryover_message(playcontroller, end_level, res); } playcontroller.maybe_linger(); playcontroller.update_savegame_snapshot(); if(mp_info_) { mp_info_->connected_players = playcontroller.all_players(); } return res; }
LEVEL_RESULT campaign_controller::playsingle_scenario(end_level_data &end_level) { playsingle_controller playcontroller(is_replay_ ? state_.get_replay_starting_pos() : state_.get_starting_pos(), state_, game_config_, tdata_, video_, false); LOG_NG << "created objects... " << (SDL_GetTicks() - playcontroller.get_ticks()) << "\n"; if(is_replay_) { playcontroller.enable_replay(is_unit_test_); } LEVEL_RESULT res = playcontroller.play_scenario(is_replay_ ? state_.get_replay_starting_pos() : state_.get_starting_pos()); if (res == LEVEL_RESULT::QUIT) { return LEVEL_RESULT::QUIT; } if(!is_unit_test_) { is_replay_ = false; } if(is_replay_) { return res; } end_level = playcontroller.get_end_level_data_const(); show_carryover_message(playcontroller, end_level, res); if(!video_.faked()) { playcontroller.maybe_linger(); } state_.set_snapshot(playcontroller.to_config()); return res; }
static LEVEL_RESULT playmp_scenario(const config& game_config, config const* level, display& disp, game_state& state_of_game, hero_map& heros, hero_map& heros_start, card_map& cards, const config::const_child_itors &story, bool skip_replay, io_type_t& io_type, end_level_data &end_level) { const int ticks = SDL_GetTicks(); int num_turns = (*level)["turns"].to_int(); playmp_controller playcontroller(*level, state_of_game, heros, heros_start, cards, ticks, num_turns, game_config, disp.video(), skip_replay, io_type == IO_SERVER); LEVEL_RESULT res = playcontroller.play_scenario(story, skip_replay); playcontroller.get_end_level_data().result = res; end_level = playcontroller.get_end_level_data(); //Check if the player started as mp client and changed to host if (io_type == IO_CLIENT && playcontroller.is_host()) io_type = IO_SERVER; if (res == DEFEAT) { if (resources::persist != NULL) resources::persist->end_transaction(); gui2::show_transient_message(disp.video(), _("Defeat"), _("You have been defeated!") ); } if (res != QUIT) { if (!end_level.linger_mode) { if(!playcontroller.is_host()) { // If we continue without lingering we need to // make sure the host uploads the next scenario // before we attempt to download it. playcontroller.wait_for_upload(); } } else { try { playcontroller.linger(); } catch(end_level_exception& e) { if (e.result == QUIT) { return QUIT; } } } } return res; }
static LEVEL_RESULT playsingle_scenario(const config& game_config, const config* level, display& disp, game_state& state_of_game, hero_map& heros, hero_map& heros_start, card_map& cards, const config::const_child_itors &story, bool skip_replay, end_level_data &end_level) { const int ticks = SDL_GetTicks(); int num_turns = (*level)["turns"].to_int(); playsingle_controller playcontroller(*level, state_of_game, heros, heros_start, cards, ticks, num_turns, game_config, disp.video(), skip_replay); LEVEL_RESULT res = playcontroller.play_scenario(story, skip_replay); playcontroller.get_end_level_data().result = res; end_level = playcontroller.get_end_level_data(); if (res == DEFEAT) { if (resources::persist != NULL) { resources::persist->end_transaction(); } gui2::show_transient_message(disp.video(), _("Defeat"), _("You have been defeated!") ); } if (res != QUIT && end_level.linger_mode) { try { playcontroller.linger(); } catch(end_level_exception& e) { if (e.result == QUIT) { return QUIT; } } } return res; }