package games.strategy.triplea.oddsCalculator.ta;
import java.util.Collection;
import games.strategy.engine.data.GameData;
import games.strategy.engine.data.PlayerID;
import games.strategy.engine.data.Territory;
import games.strategy.engine.data.TerritoryEffect;
import games.strategy.engine.data.Unit;
/**
* Interface to ensure different implementations of the odds calculator all have the same public methods.
*/
public interface IOddsCalculator {
void setGameData(final GameData data);
void setCalculateData(final PlayerID attacker, final PlayerID defender, final Territory location,
final Collection<Unit> attacking, final Collection<Unit> defending, final Collection<Unit> bombarding,
final Collection<TerritoryEffect> territoryEffects, final int runCount);
AggregateResults calculate();
AggregateResults setCalculateDataAndCalculate(final PlayerID attacker, final PlayerID defender,
final Territory location, final Collection<Unit> attacking, final Collection<Unit> defending,
final Collection<Unit> bombarding, final Collection<TerritoryEffect> territoryEffects, final int runCount);
int getRunCount();
boolean getIsReady();
void setKeepOneAttackingLandUnit(final boolean bool);
void setAmphibious(final boolean bool);
void setRetreatAfterRound(final int value);
void setRetreatAfterXUnitsLeft(final int value);
void setRetreatWhenOnlyAirLeft(final boolean value);
void setAttackerOrderOfLosses(final String attackerOrderOfLosses);
void setDefenderOrderOfLosses(final String defenderOrderOfLosses);
void cancel();
void shutdown();
int getThreadCount();
void addOddsCalculatorListener(final OddsCalculatorListener listener);
// TODO: this method appears to never used.
void removeOddsCalculatorListener(final OddsCalculatorListener listener);
}