package game.model;
/** Commands are actions that have an executable
* component which will be called when the command is performed.
*/
public interface Command extends Action {
/** Execute the action. What happens here entirely depends on
* the action, e.g. an action could modify the deck and the
* player's hand to draw a card, or an action could affect cards
* on the table.
* @param game The game state, the Command can make changes to this.
* @return true if the Command was performed, false otherwise.
*/
boolean execute(Game game);
/** The conditions under which this command can be executed. Conditions
* hold the Area and Phase in which the Command must reside before it
* is allowed.
* @return The conditions or null if the command is always allowed.
*/
Condition [] conditions();
}