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);
}