Пример #1
0
        //show stuff
        void OnGUI()
        {
            if (EditorGUIUtility.isProSkin)
            {
                Styles.Draw(new Rect(0, 0, Screen.width, Screen.height), Styles.shadowedBackground);
            }

            var e = Event.current;

            GUILayout.BeginHorizontal(EditorStyles.toolbar);
            GUILayout.Space(4);
            var ascending = Prefs.consoleLogOrder == Prefs.ConsoleLogOrder.Ascending;
            var newValue  = GUILayout.Toggle(ascending, new GUIContent(ascending ? "▲" : "▼"), "label", GUILayout.Width(14));

            if (ascending != newValue)
            {
                Prefs.consoleLogOrder = newValue ? Prefs.ConsoleLogOrder.Ascending : Prefs.ConsoleLogOrder.Descending;
            }
            GUILayout.Space(2);
            Prefs.consoleLogInfo = GUILayout.Toggle(Prefs.consoleLogInfo, new GUIContent(Icons.infoIcon), logTypeFilterStyle, GUILayout.Width(30));
            GUILayout.Space(2);
            Prefs.consoleLogWarning = GUILayout.Toggle(Prefs.consoleLogWarning, new GUIContent(Icons.warningIcon), logTypeFilterStyle, GUILayout.Width(30));
            GUILayout.Space(2);
            Prefs.consoleLogError = GUILayout.Toggle(Prefs.consoleLogError, new GUIContent(Icons.errorIcon), logTypeFilterStyle, GUILayout.Width(30));

            GUILayout.FlexibleSpace();
            Prefs.consoleClearOnPlay = GUILayout.Toggle(Prefs.consoleClearOnPlay, new GUIContent("Clear On Play"), logTypeFilterStyle, GUILayout.Width(100));
            if (GUILayout.Button("Clear", EditorStyles.toolbarButton, GUILayout.Width(70)))
            {
                messages.Clear();
            }
            GUILayout.EndHorizontal();

            if (messages.Count == 0)
            {
                EditorGUILayout.HelpBox("This console will catch graph related logs and display them here instead of the normal Unity console, thus save bloat from the Unity console.\nFurthermore, any log displayed here can be clicked to focus the relevant graph element that the log relates to automatically.\nIt is recommended to dock this console bellow the Graph Editor for easier debugging.", MessageType.Info);
            }

            scrollPos = GUILayout.BeginScrollView(scrollPos);
            for (var i = (ascending ? messages.Count - 1 : 0); (ascending ? i >= 0 : i < messages.Count); i = (ascending ? i - 1 : i + 1))
            {
                var msg = messages[i];

                if (ascending && messages.Count - i > MAX_VIEW_MESSAGES)
                {
                    continue;
                }
                if (!ascending && messages.Count - MAX_VIEW_MESSAGES > i)
                {
                    continue;
                }
                if (IsFiltered(msg.type))
                {
                    continue;
                }

                if (EditorGUIUtility.isProSkin)
                {
                    GUI.color = Color.black.WithAlpha(i % 2 == 0 ? 0.3f : 0);
                }
                if (!EditorGUIUtility.isProSkin)
                {
                    GUI.color = Color.white.WithAlpha(i % 2 == 0 ? 0.3f : 0);
                }
                GUILayout.BeginHorizontal(GUI.skin.box);
                GUI.color = Color.white;
                var content = GetFormatedGUIContentForMessage(msg);
                GUILayout.Label(content, Styles.leftLabel, GUILayout.Width(0), GUILayout.ExpandWidth(true));
                if (GUILayout.Button("X", GUILayout.Width(18)))
                {
                    messages.RemoveAt(i);
                }
                GUILayout.EndHorizontal();
                var lastRect = GUILayoutUtility.GetLastRect();
                EditorGUIUtility.AddCursorRect(lastRect, MouseCursor.Link);
                if (lastRect.Contains(e.mousePosition) && e.type == EventType.MouseDown)
                {
                    ProccessMessage(msg);
                }
            }
            GUILayout.EndScrollView();
        }