Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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;
}
Esempio n. 4
0
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;
}