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();
}
Ejemplo n.º 2
0
/**
 * Function that will clear shroud (and fog) based on current unit positions.
 *
 * This will not re-fog hexes unless reset_fog is set to true.
 * This function will do nothing if the side uses neither shroud nor fog.
 * This function ignores the "delayed shroud updates" setting.
 * The display is invalidated as needed.
 *
 * @param[in] side         The side whose shroud (and fog) will be cleared.
 * @param[in] reset_fog    If set to true, the fog will also be recalculated
 *                         (refogging hexes that can no longer be seen).
 * @param[in] fire_events  If set to false, sighted events will not be fired.
 * @returns true if some shroud/fog is actually cleared away.
 */
bool clear_shroud(int side, bool reset_fog, bool fire_events)
{
	team &tm = resources::gameboard->get_team(side);
	if (!tm.uses_shroud() && !tm.uses_fog())
		return false;

	bool result = false;

	shroud_clearer clearer;
	for (const unit &u : resources::gameboard->units())
	{
		if ( u.side() == side )
			result |= clearer.clear_unit(u.get_location(), u, tm);
	}
	// Update the screen.
	if ( result )
		clearer.invalidate_after_clear();

	// Sighted events.
	if ( fire_events )
		clearer.fire_events();
	else
		clearer.drop_events();

	if ( reset_fog ) {
		// Note: This will not reveal any new tiles, so result is not affected.
		//       Also, we do not have to check fire_events at this point.
		recalculate_fog(side);
	}

	return result;
}
Ejemplo n.º 3
0
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();
}
Ejemplo n.º 4
0
void playsingle_controller::after_human_turn(){
	browse_ = true;
	end_turn_record();
	end_turn_record_unlock();
	menu_handler_.clear_undo_stack(player_number_);

	if(teams_[player_number_-1].uses_fog()) {
		// needed because currently fog is only recalculated when a hex is /un/covered
		recalculate_fog(player_number_);
	}

	gui_->set_route(NULL);
	gui_->unhighlight_reach();
}