package com.christophdietze.jack.client.presenter;
import com.allen_sauer.gwt.log.client.Log;
import com.christophdietze.jack.client.event.PromotionMoveCancelledEvent;
import com.christophdietze.jack.client.event.PromotionMoveInitiatedEvent;
import com.christophdietze.jack.client.event.PromotionMoveInitiatedEventHandler;
import com.christophdietze.jack.client.util.GlobalEventBus;
import com.christophdietze.jack.shared.board.PieceType;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@Singleton
public class PromotionPresenter {
public interface View {
public void showPopup(int toIndex);
}
@Inject
private GameManager gameManager;
private View view;
private GlobalEventBus eventBus;
private int fromIndex;
private int toIndex;
@Inject
public PromotionPresenter(GlobalEventBus eventBus) {
invalidateTentativeMove();
this.eventBus = eventBus;
initListeners();
}
public void bindView(View view) {
assert this.view == null;
this.view = view;
}
public void onPieceSelected(PieceType promotionPiece) {
assert promotionPiece != null;
Log.debug("Promotion Piece selected: " + promotionPiece);
gameManager.makePromotionMove(fromIndex, toIndex, promotionPiece);
invalidateTentativeMove();
}
public void onNoPieceSelected() {
invalidateTentativeMove();
eventBus.fireEvent(new PromotionMoveCancelledEvent());
}
private void initListeners() {
eventBus.addHandler(PromotionMoveInitiatedEvent.TYPE, new PromotionMoveInitiatedEventHandler() {
@Override
public void onEvent(PromotionMoveInitiatedEvent event) {
fromIndex = event.getFromIndex();
toIndex = event.getToIndex();
view.showPopup(event.getToIndex());
}
});
}
private void invalidateTentativeMove() {
fromIndex = toIndex = -1;
}
}