private void UpdateGameState(Square from, Square to, Position newPosition, PieceColor playerWhoDidTheMove) { if (PlayerMovedPawnToPromotionRank(from, to)) { State = GameState.Promotion; } else if (newPosition.WhiteKingIsInCheck() || newPosition.BlackKingIsInCheck()) { State = newPosition.HasLegalMoves(PlayerToMove) ? GameState.Check : GameState.CheckMate; } else { State = newPosition.HasLegalMoves(PlayerToMove) && newPosition.HasLegalMoves(playerWhoDidTheMove) ? GameState.Normal : GameState.StaleMate; } }