package com.editev.chess.printer;
import com.editev.chess.GameHTML;
import com.editev.chess.Move;
/** Prints just a single piece.
*
* @see See the source here.
*/
public class PiecePrinter extends Printer {
/** Print any promotions. */
public Printer promotionPrinter = new PromotionPrinter();
/** Prints just one piece to the PrintStream.
*
* @param game the GameHTML with the board status and PrintStream for this board.
*/
public void print( GameHTML game ) {
byte piece = game.getPieceIndex( game.square ); // get the piece being printed.
short count = (short) game.counts.getCount( game.square ); // and the number of moves to/from that square.
if (count == NO_MOVE) { // this square has the piece that's moving.
game.out.print( "" ); // change the color
game.out.print( game.getPieceHTML( piece ) ); // print the piece
game.out.print( "" );
return;
} else if (count == 0 ) { // no action here at all.
game.out.print( game.getPieceHTML( piece ) ); // just print the piece
return;
} else if (game.target != NO_MOVE) { // we are halfway through a move.
Move move = game.getMove( game.target ); // get the move we started,
byte movedPiece = game.getPieceIndex( move ); // and the piece being moved.
if ( ( movedPiece == White.PAWN
|| movedPiece == Black.PAWN) // it's a pawn
&&
( move.target.row == 0
|| move.target.row == 7) // and it's a promotion!
)
{
promotionPrinter.print( game );
game.moveCount += 4; // a promotion consumes 4 moves.
return;
}
}
if (game.hasJavascript) {
game.out.print( " 1 ) game.out.print( "&{target+'" + game.moveCount + "'};" ); // first half of a move with multiple completions
else game.out.print( "&{move+'" + game.moveCount + "'};" ); // this move is unambiguously determined by the target square.
game.out.print( "\">" ); // finish the tag
} else {
game.out.print( " 1 ) game.out.print( game.targetURL + game.moveCount ); // first half of a move with multiple completions
else game.out.print( game.moveURL + game.moveCount ); // this move is unambiguously determined by the target square.
game.out.print( "\">" ); // finish the tag
}
if (game.target != NO_MOVE && piece == NO_PIECE) game.out.print( game.textOnly ? "-" : " ");
else game.out.print( game.getPieceHTML( piece ) ); // the piece itself
game.out.print( "" ); // and the closing tag for
game.moveCount += count; // we have consumed 'count' moves this time.
}
}