protected virtual void UseGameCreationData(GameCreationData data)
{
Board = CloneBoard(data.Board);
WhoseTurn = data.WhoseTurn;
Piece e1 = GetPieceAt(File.E, 1);
Piece e8 = GetPieceAt(File.E, 8);
Piece a1 = GetPieceAt(File.A, 1);
Piece h1 = GetPieceAt(File.H, 1);
Piece a8 = GetPieceAt(File.A, 8);
Piece h8 = GetPieceAt(File.H, 8);
CanBlackCastleKingSide = CanBlackCastleQueenSide = CanWhiteCastleKingSide = CanWhiteCastleQueenSide = CastlingCanBeLegal;
if (CastlingCanBeLegal)
{
if (!(e1 is King) || e1.Owner != Player.White)
CanWhiteCastleKingSide = CanWhiteCastleQueenSide = false;
if (!(e8 is King) || e8.Owner != Player.Black)
CanBlackCastleKingSide = CanBlackCastleQueenSide = false;
if (!(a1 is Rook) || a1.Owner != Player.White || !data.CanWhiteCastleQueenSide)
CanWhiteCastleQueenSide = false;
if (!(h1 is Rook) || h1.Owner != Player.White || !data.CanWhiteCastleKingSide)
CanWhiteCastleKingSide = false;
if (!(a8 is Rook) || a8.Owner != Player.Black || !data.CanBlackCastleQueenSide)
CanBlackCastleQueenSide = false;
if (!(h8 is Rook) || h8.Owner != Player.Black || !data.CanBlackCastleKingSide)
CanBlackCastleKingSide = false;
}
if (data.EnPassant != null)
{
DetailedMove latestMove = new DetailedMove(new Move(new Position(data.EnPassant.File, data.WhoseTurn == Player.White ? 7 : 2),
new Position(data.EnPassant.File, data.WhoseTurn == Player.White ? 5 : 4),
ChessUtilities.GetOpponentOf(data.WhoseTurn)),
new Pawn(ChessUtilities.GetOpponentOf(data.WhoseTurn)),
false,
CastlingType.None);
_moves.Add(latestMove);
}
_halfMoveClock = data.HalfMoveClock;
_fullMoveNumber = data.FullMoveNumber;
}