private void GUI_lineNumber(BTLGUILine line)
        {
            // Determine whether the lines contains a node that has been ticked on this frame.
            bool hasBeenTickedOnThisFrame = HasBeenTickedOnThisFrame(line);
            bool containsLeafNode         = hasBeenTickedOnThisFrame ? ContainsLeafNodes(line) : false;

            var lineNumberStyle = BTLSyntaxHighlight.style_lineNumber;

#if !PANDA_BT_FREE
            bool isActive = hasBeenTickedOnThisFrame && (containsLeafNode || line.isFoldout) && !line.isBreakPointEnable;
#else
            bool isActive = hasBeenTickedOnThisFrame && (containsLeafNode || line.isFoldout);
#endif


            if (isActive)
            {
                lineNumberStyle = BTLSyntaxHighlight.style_lineNumber_active;
            }
#if !PANDA_BT_FREE
            if (line.isBreakPointEnable)
            {
                if (hasBeenTickedOnThisFrame && isPaused && line.isBreakPointActive)
                {
                    lineNumberStyle = BTLSyntaxHighlight.style_breakpoint_active;
                }
                else
                {
                    switch (line.breakPointStatus)
                    {
                    case Status.Running:
                        lineNumberStyle = BTLSyntaxHighlight.style_breakpoint_set_running;
                        break;

                    case Status.Succeeded:
                        lineNumberStyle = BTLSyntaxHighlight.style_breakpoint_set_succeeded;
                        break;

                    case Status.Failed:
                        lineNumberStyle = BTLSyntaxHighlight.style_breakpoint_set_failed;
                        break;

                    default:
                        lineNumberStyle = BTLSyntaxHighlight.style_breakpoint_set_running;
                        break;
                    }
                }
            }
#endif
            if (line.hasErrors)
            {
                lineNumberStyle = BTLSyntaxHighlight.style_lineNumber_error;
            }



#if UNITY_EDITOR && !PANDA_BT_FREE
            if (line.btnodes != null && line.btnodes.Count > 0)
            {
                if (GUILayout.Button(line.lineNumberText, lineNumberStyle))
                {
                    if (Event.current.button == 0)
                    {
                        line.ToggleBreakPoint();
                    }
                    else if (Event.current.button == 1)
                    {
                        line.ClearBreakPoint();
                    }

                    var  breakPoints        = bt.sourceInfos[scriptIndex].breakPoints;
                    var  breakPointStatuses = bt.sourceInfos[scriptIndex].breakPointStatuses;
                    bool isDirty            = true;
                    while (isDirty)
                    {
                        isDirty = false;
                        for (int i = 0; i < breakPoints.Count; ++i)
                        {
                            if (breakPoints[i] == line.lineNumber)
                            {
                                breakPoints.RemoveAt(i);
                                breakPointStatuses.RemoveAt(i);
                                isDirty = true;
                                break;
                            }
                        }
                    }

                    if (line.isBreakPointEnable)
                    {
                        breakPoints.Add(line.lineNumber);
                        breakPointStatuses.Add(line.breakPointStatus);
                    }
                }
            }
            else
            {
                GUILayout.Label(line.lineNumberText, lineNumberStyle);
            }
#else
            GUILayout.Label(line.lineNumberText, lineNumberStyle);
#endif
        }