package com.christophdietze.jack.client.presenter;
import com.christophdietze.jack.client.event.PromotionMoveInitiatedEvent;
import com.christophdietze.jack.client.util.GlobalEventBus;
import com.christophdietze.jack.shared.board.*;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@Singleton
public class GameManager {
private GlobalEventBus eventBus;
private Game game;
@Inject
public GameManager(GlobalEventBus eventBus, Game game) {
this.eventBus = eventBus;
this.game = game;
}
public void makeMove(int fromIndex, int toIndex) {
Position position = game.getPosition();
Move move = new Move(fromIndex, toIndex);
if (PositionUtils.isPseudoPromotionMove(position, move)) {
Move pretendedPromoMove = new Move(fromIndex, toIndex, PieceType.QUEEN);
if (MoveChecker.isLegalMove(position, pretendedPromoMove)) {
eventBus.fireEvent(new PromotionMoveInitiatedEvent(fromIndex, toIndex));
}
} else {
try {
game.makeMoveVerified(move);
} catch (IllegalMoveException ex) {
}
}
}
public void makePromotionMove(int fromIndex, int toIndex, PieceType promotionPiece) {
Move move = new Move(fromIndex, toIndex, promotionPiece);
try {
game.makeMoveVerified(move);
} catch (IllegalMoveException ex) {
throw (AssertionError) (new AssertionError("Illegal promotion move should have been discarded earlier")
.initCause(ex));
}
}
}