public short[] getNextShortMoves() { short[] moves = new short[m_moves.getNumOfNextMoves(m_cur)]; for (int i = 0; i < moves.length; i++) { moves[i] = m_moves.getMove(m_moves.goForward(m_cur, i)); } return moves; }
public int getNumOfPlies() { int num = 0; int index = 0; while (m_moves.hasNextMove(index)) { index = m_moves.goForward(index); num++; } return num; }
public void deleteCurrentLine(boolean silent) { int index = m_cur; if (goBack(silent)) { m_moves.deleteCurrentLine(index); fireMoveModelChanged(); } }
public void notifyMoveUndone(ImmutablePosition position) { if (DEBUG) System.out.println("ChGame: move taken back in position"); if (!m_ignoreNotifications) { m_cur = m_moves.goBack(m_cur, true); } }
public Move getNextMove(int whichLine) { short shortMove = m_moves.getMove(m_moves.goForward(m_cur, whichLine)); if (shortMove == GameMoveModel.NO_MOVE) return null; // =====> try { m_position.setNotifyListeners(false); m_position.doMove(shortMove); // ChMove move = m_position.getLastMove(shortMove); Move move = m_position.getLastMove(); m_position.undoMove(); m_position.setNotifyListeners(true); return move; } catch (IllegalMoveException ex) { ex.printStackTrace(); return null; } }
private int getNumOfPliesToRoot(int node) { int plies = 0; while (node > 0) { node = m_moves.goBack(node, true); plies++; } return plies; }
public void notifyMoveDone(ImmutablePosition position, short move) { if (DEBUG) System.out.println("ChGame: move made in position " + move); if (!m_ignoreNotifications) { if (!m_alwaysAddLine) { short[] moves = getNextShortMoves(); for (int i = 0; i < moves.length; i++) { if (moves[i] == move) { m_cur = m_moves.goForward(m_cur, i); return; // =====> } } } m_cur = m_moves.appendAsRightMostLine(m_cur, move); fireMoveModelChanged(); } }
public Move[] getNextMoves() { m_position.setNotifyListeners(false); Move[] moves = new Move[m_moves.getNumOfNextMoves(m_cur)]; for (int i = 0; i < moves.length; i++) { short move = m_moves.getMove(m_moves.goForward(m_cur, i)); try { m_position.doMove(move); // moves[i] = m_position.getLastMove(move); moves[i] = m_position.getLastMove(); m_position.undoMove(); } catch (IllegalMoveException ex) { m_moves.write(System.out); System.out.println("cur = " + m_cur + " move=" + GameMoveModel.valueToString(move)); ex.printStackTrace(); } } m_position.setNotifyListeners(true); return moves; }
public Move[] getMainLine() { int num = 0; int index = m_cur; while (m_moves.hasNextMove(index)) { index = m_moves.goForward(index); num++; } Move[] moves = new Move[num]; for (int i = 0; i < num; i++) { moves[i] = goForwardAndGetMove(true); } m_position.setNotifyListeners(false); for (int i = 0; i < moves.length; i++) m_position.undoMove(); m_position.setNotifyListeners(true); return moves; }
private int[] getNodesToRoot(int node) { int[] nodes; int i = 0; if (m_moves.getMove(node) != GameMoveModel.NO_MOVE) { nodes = new int[getNumOfPliesToRoot(node) + 1]; nodes[0] = node; i = 1; } else { nodes = new int [getNumOfPliesToRoot( node)]; // if we stand on a line end, don't include node in nodes to root i = 0; } for (; i < nodes.length; i++) { node = m_moves.goBack(node, true); nodes[i] = node; } return nodes; }
private boolean goForward(int whichLine, boolean silent) { if (DEBUG) System.out.println("goForward " + whichLine); int index = m_moves.goForward(m_cur, whichLine); short shortMove = m_moves.getMove(index); if (DEBUG) System.out.println(" move = " + Move.getString(shortMove)); if (shortMove != GameMoveModel.NO_MOVE) { try { m_cur = index; m_ignoreNotifications = true; if (silent) m_position.setNotifyListeners(false); m_position.doMove(shortMove); if (silent) m_position.setNotifyListeners(true); m_ignoreNotifications = false; return true; } catch (IllegalMoveException ex) { ex.printStackTrace(); } } else { // new Exception("Forward at end of line").printStackTrace(); } return false; }
public void gotoNode(int node, boolean silent) { int[] nodeNodes = getNodesToRoot(node); gotoStart(silent); for (int i = nodeNodes.length - 2; i >= 0; i--) { int nextMoveIndex = 0; for (int j = 1; j < getNumOfNextMoves(); j++) { if (m_moves.goForward(m_cur, j) == nodeNodes[i]) { nextMoveIndex = j; break; } } goForward(nextMoveIndex, silent); } m_cur = node; // now that we have made all the moves, set cur to node }
private boolean goBackInLine(boolean silent) { if (DEBUG) System.out.println("goBackInLine"); int index = m_moves.goBack(m_cur, false); if (index != -1) { m_cur = index; // needs to be set before undoing the move to allow listeners to check for curNode m_ignoreNotifications = true; if (silent) m_position.setNotifyListeners(false); m_position.undoMove(); if (silent) m_position.setNotifyListeners(true); m_ignoreNotifications = false; return true; } else { return false; } }
private boolean goBack(boolean silent) { if (DEBUG) System.out.println("goBack"); int index = m_moves.goBack(m_cur, true); if (index != -1) { // if (m_position.canUndoMove()) { // do not rely on position since in silent mode it // is not updated // m_cur = m_moves.goBack(m_cur, true); m_cur = index; m_ignoreNotifications = true; if (silent) m_position.setNotifyListeners(false); m_position.undoMove(); if (silent) m_position.setNotifyListeners(true); m_ignoreNotifications = false; return true; } else { return false; } }
public short getNextShortMove(int whichLine) { return m_moves.getMove(m_moves.goForward(m_cur, whichLine)); }
public boolean hasNag(short nag) { return m_moves.hasNag(m_cur, nag); }
public short[] getNags() { return m_cur == 0 ? null : m_moves.getNags(m_cur); }
public void addNag(short nag) { m_moves.addNag(m_cur, nag); fireMoveModelChanged(); }
public void removeNag(short nag) { if (m_moves.removeNag(m_cur, nag)) fireMoveModelChanged(); }
public String getComment() { return m_moves.getComment(m_cur); }
public void setComment(String comment) { if (m_moves.setComment(m_cur, comment)) fireMoveModelChanged(); }
public int getNumOfNextMoves() { return m_moves.getNumOfNextMoves(m_cur); }
public void removeComment() { if (m_moves.removeComment(m_cur)) fireMoveModelChanged(); }
public int getTotalNumOfPlies() { return m_moves.getTotalNumOfPlies(); }
public void pack() { m_cur = m_moves.pack(m_cur); // TODO pack headers? }
public boolean hasNextMove() { return m_moves.hasNextMove(m_cur); }