void playsingle_controller::after_human_turn()
{
	team& current_team = teams_[player_number_ - 1];

	// add cards if in card mode
	if (card_mode_) {
		execute_card_bh(turn(), player_number_);
	}
	do_commoner(current_team);

	// clear access troops
	gui_->refresh_access_troops(player_number_ - 1, game_display::REFRESH_CLEAR);
	gui_->refresh_access_heros(player_number_ - 1, game_display::REFRESH_CLEAR);
	// hide context-menu
	gui_->hide_context_menu(NULL, true);

	// Mark the turn as done.
	browse_ = true;
	end_turn_record();
	end_turn_record_unlock();
	menu_handler_.clear_undo_stack(player_number_);

	if (current_team.uses_fog()) {
		// needed because currently fog is only recalculated when a hex is /un/covered
		recalculate_fog(player_number_);
	}

	// Clear moves from the GUI.
	gui_->set_route(NULL);
	gui_->unhighlight_reach();
}
void playsingle_controller::after_human_turn()
{
	team& current_team = teams_[player_number_ - 1];

	// add cards if in card mode
	if (card_mode_) {
		execute_card_bh(turn(), player_number_);
	}
	if (actor_can_action(units_)) {
		if (unit::actor->is_city()) {
			do_commoner(current_team);
		}
	}

	if (!tent::tower_mode() && !preferences::developer()) {
		gui_->refresh_access_troops(player_number_ - 1, game_display::REFRESH_HIDE, reinterpret_cast<void*>(this));
	}
	gui_->refresh_access_heros(player_number_ - 1, game_display::REFRESH_CLEAR);
	// hide context-menu
	gui_->hide_context_menu();

	// Mark the turn as done.
	browse_ = true;
	menu_handler_.clear_undo_stack(player_number_);

	if (current_team.uses_fog()) {
		// needed because currently fog is only recalculated when a hex is /un/covered
		recalculate_fog(player_number_);
	}

	// Clear moves from the GUI.
	gui_->set_route(NULL);
	gui_->unhighlight_reach();
}
void playsingle_controller::play_ai_turn()
{
	uint32_t start = SDL_GetTicks();
	total_draw = 0;
	total_draws = 0;
	total_analyzing = 0;
	total_recruit = 0;
	total_combat = 0;
	total_build = 0;
	total_move = 0;
	total_diplomatism = 0;

	team& current_team = teams_[player_number_ - 1];

	{
		const events::command_disabler disable_commands;

		if (card_mode_) {
			execute_card_uh(turn(), player_number_);
		}
		execute_guard_attack(player_number_);
	}

	gui_->enable_menu("play_card", false);
	gui_->enable_menu("undo", false);
	gui_->enable_menu("endturn", false);
	browse_ = true;
	gui_->recalculate_minimap();

	const cursor::setter cursor_setter(cursor::WAIT);

	turn_info turn_data(player_number_, replay_sender_, undo_stack_);

	uint32_t before = SDL_GetTicks();
	try {
		ai::manager::play_turn(player_number_);
	} catch (end_turn_exception&) {
	}
	uint32_t after = SDL_GetTicks();

	if (!teams_[player_number_ - 1].is_human()) {
		recorder.end_turn();
	}
	turn_data.sync_network();

	if (!current_team.is_human()) {
		gui_->recalculate_minimap();
		::clear_shroud(player_number_);
		gui_->invalidate_unit();
		gui_->invalidate_game_status();
		gui_->invalidate_all();
		
		gui_->draw();

		if (card_mode_) {
			execute_card_bh(turn(), player_number_);
		}
	}

	uint32_t stop = SDL_GetTicks();
	posix_print("#%i, play_ai_turn %u ms, (draw: %u(%i), analyzing: %u), [%u](%u+[%u]+%u)(recruit: %u, combat: %u, build: %u, move: %u, diplomatism: %u)\n", 
		player_number_, stop - start, total_draw, total_draws, total_analyzing, 
		before - start + total_recruit + total_combat + total_build + total_move + total_diplomatism + stop - after,
		before - start, total_recruit + total_combat + total_build + total_move + total_diplomatism, stop - after,
		total_recruit, total_combat, total_build, total_move, total_diplomatism);
}
void playsingle_controller::play_ai_turn(turn_info* turn_data)
{
	uint32_t start = SDL_GetTicks();
	total_analyzing = 0;
	total_recruit = 0;
	total_combat = 0;
	total_build = 0;
	total_move = 0;
	total_diplomatism = 0;

	team& current_team = teams_[player_number_ - 1];

	{
		const events::command_disabler disable_commands;

		if (card_mode_) {
			execute_card_uh(turn(), player_number_);
		}
		execute_guard_attack(player_number_);
	}

	gui_->set_theme_object_active("card", false);
	gui_->set_theme_object_active("undo", false);
	if (tent::mode == mode_tag::SIEGE) {
		
	} else {
		gui_->set_theme_object_active("endturn", false);
	}
	browse_ = true;
	gui_->recalculate_minimap();

	const cursor::setter cursor_setter(cursor::WAIT);

	uint32_t before = SDL_GetTicks();
	try {
		ai::manager::play_turn();
	} catch (end_turn_exception&) {
	}
	uint32_t after = SDL_GetTicks();

	if (turn_data) {
		turn_data->sync_network();
	}

	if (unit::actor && !teams_[unit::actor->side() - 1].is_human()) {
/*
		gui_->recalculate_minimap();
		::clear_shroud(unit::actor->side());
		gui_->invalidate_unit();
		gui_->invalidate_game_status();
		gui_->invalidate_all();
		
		gui_->draw();
*/
		if (card_mode_) {
			execute_card_bh(turn(), player_number_);
		}
	}

	// do_delay_call(true);

	uint32_t stop = SDL_GetTicks();
	posix_print("#%i, play_ai_turn %u ms, (analyzing: %u), [%u](%u+[%u]+%u)(recruit: %u, combat: %u, build: %u, move: %u, diplomatism: %u)\n", 
		player_number_, stop - start, total_analyzing, 
		before - start + total_recruit + total_combat + total_build + total_move + total_diplomatism + stop - after,
		before - start, total_recruit + total_combat + total_build + total_move + total_diplomatism, stop - after,
		total_recruit, total_combat, total_build, total_move, total_diplomatism);
}