package com.christophdietze.jack.client.presenter; import com.christophdietze.jack.client.event.GameUpdatedEvent; import com.christophdietze.jack.client.event.GameUpdatedEventHandler; import com.christophdietze.jack.client.event.PromotionMoveCancelledEvent; import com.christophdietze.jack.client.event.PromotionMoveCancelledEventHandler; 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.Game; import com.christophdietze.jack.shared.board.Move; import com.google.inject.Inject; import com.google.inject.Singleton; @Singleton public class BoardPresenter { public static interface View { public void update(); public void showPromotionPawn(int from, int to); } private View view; private Game game; private GlobalEventBus eventBus; private GameManager gameManager; private Move promotionMove; @Inject public BoardPresenter(GlobalEventBus eventBus, Game game, GameManager gameManager) { this.eventBus = eventBus; this.game = game; this.gameManager = gameManager; initListeners(); } public void bindView(View view) { assert this.view == null; this.view = view; } public Game getGame() { return game; } public Move getPromotionMove() { return promotionMove; } public void makeMove(int fromIndex, int toIndex) { gameManager.makeMove(fromIndex, toIndex); } private void initListeners() { eventBus.addHandler(GameUpdatedEvent.TYPE, new GameUpdatedEventHandler() { @Override public void onUpdate(GameUpdatedEvent event) { view.update(); } }); eventBus.addHandler(PromotionMoveInitiatedEvent.TYPE, new PromotionMoveInitiatedEventHandler() { @Override public void onEvent(PromotionMoveInitiatedEvent event) { view.showPromotionPawn(event.getFromIndex(), event.getToIndex()); } }); eventBus.addHandler(PromotionMoveCancelledEvent.TYPE, new PromotionMoveCancelledEventHandler() { @Override public void onEvent(PromotionMoveCancelledEvent event) { view.update(); } }); } }