package me.desht.chesscraft.chess.player;
import chesspresso.Chess;
import me.desht.chesscraft.chess.BoardView;
import me.desht.chesscraft.chess.ChessGame;
import me.desht.chesscraft.chess.GameListener;
import me.desht.chesscraft.chess.TimeControl;
import org.apache.commons.lang.Validate;
public abstract class ChessPlayer {
private final String id;
private final String displayName;
private final ChessGame game;
private int colour;
private int promotionPiece;
public ChessPlayer(String id, String displayName, ChessGame game, int colour) {
Validate.notNull(id, "ID must be non-null");
Validate.notNull(displayName, "Name must be non-null");
Validate.notNull(game, "Game must be non-null");
this.id = id;
this.displayName = displayName;
this.game = game;
this.colour = colour;
this.promotionPiece = Chess.QUEEN;
}
public String getId() {
return id;
}
public String getDisplayName() {
return displayName;
}
public int getColour() {
return colour;
}
public int getOtherColour() {
return Chess.otherPlayer(colour);
}
public void setColour(int colour) {
this.colour = colour;
}
public ChessGame getGame() {
return game;
}
public void setPromotionPiece(int promotionPiece) {
this.promotionPiece = promotionPiece;
for (GameListener l : getGame().getListeners()) {
l.promotionPieceChanged(this, promotionPiece);
}
}
public int getPromotionPiece() {
return promotionPiece;
}
public int cyclePromotionPiece() {
switch (promotionPiece) {
case Chess.QUEEN:
promotionPiece = Chess.KNIGHT; break;
case Chess.KNIGHT:
promotionPiece = Chess.BISHOP; break;
case Chess.BISHOP:
promotionPiece = Chess.ROOK; break;
case Chess.ROOK:
promotionPiece = Chess.QUEEN; break;
default:
promotionPiece = Chess.QUEEN; break;
}
return promotionPiece;
}
public abstract String getResultsName();
public abstract void validateAffordability(String error);
public abstract void validateInvited(String error);
public abstract void promptForFirstMove();
public abstract void promptForNextMove();
public abstract void alert(String message);
public abstract void statusMessage(String message);
public abstract void replayMoves();
public abstract void cleanup();
public abstract boolean isHuman();
public abstract void withdrawFunds(double amount);
public abstract void depositFunds(double amount);
public abstract void teleport(BoardView view);
public abstract void cancelOffers();
public abstract double getPayoutMultiplier();
public abstract void drawOffered();
public abstract void swapOffered();
public abstract void undoOffered();
public abstract void undoLastMove();
public abstract void checkPendingAction();
public abstract void playEffect(String effect);
public abstract void notifyTimeControl(TimeControl timeControl);
public abstract void timeControlCheck();
}