package games.strategy.engine.framework;
import java.io.File;
import games.strategy.engine.data.Change;
import games.strategy.engine.data.GameData;
import games.strategy.engine.data.PlayerManager;
import games.strategy.engine.data.events.GameStepListener;
import games.strategy.engine.display.IDisplay;
import games.strategy.engine.message.IChannelMessenger;
import games.strategy.engine.message.IRemoteMessenger;
import games.strategy.engine.message.RemoteName;
import games.strategy.engine.random.IRandomSource;
import games.strategy.engine.vault.Vault;
import games.strategy.net.IMessenger;
import games.strategy.sound.ISound;
/**
* Represents a running game.
*
* <p>
* Allows access to the games communication interfaces, and to listen to the current game step.
* </p>
*/
public interface IGame {
RemoteName GAME_MODIFICATION_CHANNEL =
new RemoteName(IGame.class.getName() + ".GAME_MODIFICATION_CHANNEL", IGameModifiedChannel.class);
GameData getData();
void addGameStepListener(GameStepListener listener);
void removeGameStepListener(GameStepListener listener);
IMessenger getMessenger();
IChannelMessenger getChannelMessenger();
IRemoteMessenger getRemoteMessenger();
Vault getVault();
/**
* Should not be called outside of engine code.
*/
void addChange(Change aChange);
boolean canSave();
IRandomSource getRandomSource();
/**
* add a display that will recieve broadcasts from the IDelegateBridge.getDisplayBroadvaster
*/
void addDisplay(IDisplay display);
/**
* remove a display.
*/
void removeDisplay(IDisplay display);
void addSoundChannel(ISound display);
void removeSoundChannel(ISound display);
/**
* Is the game over. Game over does not relate to the state of the game (eg check-mate in chess)
* but to the game being shut down and all players have left.
*/
boolean isGameOver();
/**
* @return a listing of who is playing who.
*/
PlayerManager getPlayerManager();
/**
* Save the game to the given directory.
* The file should exist and be writeable.
*/
void saveGame(File f);
}