package jrummikub.control.turn; import java.util.Date; import javax.swing.SwingUtilities; import jrummikub.model.IHand; import jrummikub.model.ITable; import jrummikub.view.IView; public class BaseAIControl extends AbstractTurnControl { long startTime; @Override public void startTurn() { Thread thread = new Thread(new Runnable() { @Override public void run() { compute(); } }); startTime = System.currentTimeMillis(); thread.start(); } private void compute() { if (mayRedeal) { emitRedeal(); } else { if (player.getLaidOut()) { layOut(); } else { emitEndOfTurn(); } } } private void layOut() { emitEndOfTurn(); } private void emitRedeal() { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { redealEvent.emit(); } }); } private void emitEndOfTurn() { long timeElapsed = System.currentTimeMillis() - startTime; long waitTime = 2000 - timeElapsed; if (waitTime > 0) { try { Thread.sleep(waitTime); } catch (InterruptedException e) { // This shouldn't happen } } SwingUtilities.invokeLater(new Runnable() { @Override public void run() { endOfTurnEvent.emit(); } }); } static public TurnControlFactory getFactory() { return new TurnControlFactory() { @Override public ITurnControl create() { return new BaseAIControl(); } }; } }