870 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			870 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
								 | 
							
								namespace SRDebugger.Editor
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								    using System;
							 | 
						|||
| 
								 | 
							
								    using System.Collections;
							 | 
						|||
| 
								 | 
							
								    using System.Collections.Generic;
							 | 
						|||
| 
								 | 
							
								    using System.Globalization;
							 | 
						|||
| 
								 | 
							
								    using System.Linq;
							 | 
						|||
| 
								 | 
							
								    using SRDebugger.Internal;
							 | 
						|||
| 
								 | 
							
								    using SRDebugger.Internal.Editor;
							 | 
						|||
| 
								 | 
							
								    using SRF;
							 | 
						|||
| 
								 | 
							
								    using UnityEditor;
							 | 
						|||
| 
								 | 
							
								    using UnityEditorInternal;
							 | 
						|||
| 
								 | 
							
								    using UnityEngine;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    public class SRDebuggerSettingsWindow : EditorWindow
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        private enum ProfilerAlignment
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            TopLeft = 0,
							 | 
						|||
| 
								 | 
							
								            TopRight = 1,
							 | 
						|||
| 
								 | 
							
								            BottomLeft = 2,
							 | 
						|||
| 
								 | 
							
								            BottomRight = 3
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private enum OptionsAlignment
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            TopLeft = 0,
							 | 
						|||
| 
								 | 
							
								            TopRight = 1,
							 | 
						|||
| 
								 | 
							
								            BottomLeft = 2,
							 | 
						|||
| 
								 | 
							
								            BottomRight = 3,
							 | 
						|||
| 
								 | 
							
								            TopCenter = 6,
							 | 
						|||
| 
								 | 
							
								            BottomCenter = 7
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private string _currentEntryCode;
							 | 
						|||
| 
								 | 
							
								        private bool _enableTabChange = true;
							 | 
						|||
| 
								 | 
							
								        private Tabs _selectedTab;
							 | 
						|||
| 
								 | 
							
								        private bool _showBugReportSignupForm;
							 | 
						|||
| 
								 | 
							
								        private string[] _tabs = Enum.GetNames(typeof (Tabs)).Select(s => s.Replace('_', ' ')).ToArray();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        [MenuItem("SRDebugger/OpenSetting")]
							 | 
						|||
| 
								 | 
							
								        public static void OpenSettting()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            Open();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        [MenuItem(SRDebugPaths.SettingsMenuItemPath)]
							 | 
						|||
| 
								 | 
							
								        public static void Open()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            GetWindowWithRect<SRDebuggerSettingsWindow>(new Rect(0, 0, 449, 520), true, "SRDebugger - Settings", true);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private void OnEnable()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            _currentEntryCode = GetEntryCodeString();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (string.IsNullOrEmpty(Settings.Instance.ApiKey))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                _showBugReportSignupForm = true;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private void OnGUI()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            // Draw header area 
							 | 
						|||
| 
								 | 
							
								            SRDebugEditorUtil.BeginDrawBackground();
							 | 
						|||
| 
								 | 
							
								            SRDebugEditorUtil.DrawLogo(SRDebugEditorUtil.GetLogo());
							 | 
						|||
| 
								 | 
							
								            SRDebugEditorUtil.EndDrawBackground();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // Draw header/content divider
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.BeginVertical(SRDebugEditorUtil.Styles.SettingsHeaderBoxStyle);
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.EndVertical();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // Draw tab buttons
							 | 
						|||
| 
								 | 
							
								            var rect = EditorGUILayout.BeginVertical(GUI.skin.box);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            --rect.width;
							 | 
						|||
| 
								 | 
							
								            var height = 18;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUI.BeginChangeCheck();
							 | 
						|||
| 
								 | 
							
								            EditorGUI.BeginDisabledGroup(!_enableTabChange);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            for (var i = 0; i < _tabs.Length; ++i)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                var xStart = Mathf.RoundToInt(i*rect.width/_tabs.Length);
							 | 
						|||
| 
								 | 
							
								                var xEnd = Mathf.RoundToInt((i + 1)*rect.width/_tabs.Length);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                var pos = new Rect(rect.x + xStart, rect.y, xEnd - xStart, height);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if (GUI.Toggle(pos, (int) _selectedTab == i, new GUIContent(_tabs[i]), EditorStyles.toolbarButton))
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    _selectedTab = (Tabs) i;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayoutUtility.GetRect(10f, height);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUI.EndDisabledGroup();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (EditorGUI.EndChangeCheck())
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                _scrollPosition = Vector2.zero;
							 | 
						|||
| 
								 | 
							
								                GUIUtility.keyboardControl = 0;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // Draw selected tab
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            switch (_selectedTab)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                case Tabs.General:
							 | 
						|||
| 
								 | 
							
								                    DrawTabGeneral();
							 | 
						|||
| 
								 | 
							
								                    break;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                case Tabs.Layout:
							 | 
						|||
| 
								 | 
							
								                    DrawTabLayout();
							 | 
						|||
| 
								 | 
							
								                    break;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                case Tabs.Bug_Reporter:
							 | 
						|||
| 
								 | 
							
								                    DrawTabBugReporter();
							 | 
						|||
| 
								 | 
							
								                    break;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                case Tabs.Shortcuts:
							 | 
						|||
| 
								 | 
							
								                    DrawTabShortcuts();
							 | 
						|||
| 
								 | 
							
								                    break;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                case Tabs.Advanced:
							 | 
						|||
| 
								 | 
							
								                    DrawTabAdvanced();
							 | 
						|||
| 
								 | 
							
								                    break;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.EndVertical();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // Display rating prompt and link buttons
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.LabelField(SRDebugStrings.Current.SettingsRateBoxContents, EditorStyles.miniLabel);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            SRDebugEditorUtil.DrawFooterLayout(position.width);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (GUI.changed)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                EditorUtility.SetDirty(Settings.Instance);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private enum Tabs
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            General,
							 | 
						|||
| 
								 | 
							
								            Layout,
							 | 
						|||
| 
								 | 
							
								            Bug_Reporter,
							 | 
						|||
| 
								 | 
							
								            Shortcuts,
							 | 
						|||
| 
								 | 
							
								            Advanced
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #region Tabs
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private void DrawTabGeneral()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label("Loading", SRDebugEditorUtil.Styles.InspectorHeaderStyle);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.BeginVertical(EditorStyles.inspectorDefaultMargins);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (GUILayout.Toggle(!Settings.Instance.IsEnabled, "Disabled", SRDebugEditorUtil.Styles.RadioButton))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                Settings.Instance.IsEnabled = false;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label("Do not load SRDebugger until a manual call to <i>SRDebug.Init()</i>.",
							 | 
						|||
| 
								 | 
							
								                SRDebugEditorUtil.Styles.RadioButtonDescription);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            var msg = "Automatic (recommended)";
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            if (GUILayout.Toggle(Settings.Instance.IsEnabled, msg,
							 | 
						|||
| 
								 | 
							
								                SRDebugEditorUtil.Styles.RadioButton))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                Settings.Instance.IsEnabled = true;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label("SRDebugger loads automatically when your game starts.",
							 | 
						|||
| 
								 | 
							
								                SRDebugEditorUtil.Styles.RadioButtonDescription);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.EndVertical();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label("Panel Access", SRDebugEditorUtil.Styles.InspectorHeaderStyle);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.HelpBox("Configure trigger location in the layout tab.", MessageType.None, true);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Settings.Instance.EnableTrigger =
							 | 
						|||
| 
								 | 
							
								                (Settings.TriggerEnableModes)
							 | 
						|||
| 
								 | 
							
								                    EditorGUILayout.EnumPopup(new GUIContent("Trigger Mode"),
							 | 
						|||
| 
								 | 
							
								                        Settings.Instance.EnableTrigger);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUI.BeginDisabledGroup(Settings.Instance.EnableTrigger == Settings.TriggerEnableModes.Off);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Settings.Instance.TriggerBehaviour =
							 | 
						|||
| 
								 | 
							
								                (Settings.TriggerBehaviours)
							 | 
						|||
| 
								 | 
							
								                    EditorGUILayout.EnumPopup(new GUIContent("Trigger Behaviour"),
							 | 
						|||
| 
								 | 
							
								                        Settings.Instance.TriggerBehaviour);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Settings.Instance.ErrorNotification =
							 | 
						|||
| 
								 | 
							
								                EditorGUILayout.Toggle(
							 | 
						|||
| 
								 | 
							
								                    new GUIContent("Error Notification",
							 | 
						|||
| 
								 | 
							
								                        "Display a notification on the panel trigger when an error is printed to the log."),
							 | 
						|||
| 
								 | 
							
								                    Settings.Instance.ErrorNotification);
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            EditorGUI.EndDisabledGroup();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.Space();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Settings.Instance.DefaultTab =
							 | 
						|||
| 
								 | 
							
								                (DefaultTabs)
							 | 
						|||
| 
								 | 
							
								                    EditorGUILayout.EnumPopup(
							 | 
						|||
| 
								 | 
							
								                        new GUIContent("Default Tab", SRDebugStrings.Current.SettingsDefaultTabTooltip),
							 | 
						|||
| 
								 | 
							
								                        Settings.Instance.DefaultTab);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.Space();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.BeginHorizontal();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Settings.Instance.RequireCode = EditorGUILayout.Toggle(new GUIContent("Require Entry Code"),
							 | 
						|||
| 
								 | 
							
								                Settings.Instance.RequireCode);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUI.BeginDisabledGroup(!Settings.Instance.RequireCode);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Settings.Instance.RequireEntryCodeEveryTime = EditorGUILayout.Toggle(new GUIContent("...Every Time", "Require the user to enter the PIN every time they access the debug panel."),
							 | 
						|||
| 
								 | 
							
								                Settings.Instance.RequireEntryCodeEveryTime);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.EndHorizontal();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            var newCode = EditorGUILayout.TextField("Entry Code", _currentEntryCode);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (newCode != _currentEntryCode)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                // Strip out alpha numeric chars
							 | 
						|||
| 
								 | 
							
								                newCode = new string(newCode.Where(char.IsDigit).ToArray());
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                // Max length = 4
							 | 
						|||
| 
								 | 
							
								                newCode = newCode.Substring(0, Mathf.Min(4, newCode.Length));
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if (newCode.Length == 4)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    UpdateEntryCode(newCode);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUI.EndDisabledGroup();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.Space();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Settings.Instance.AutomaticallyShowCursor =
							 | 
						|||
| 
								 | 
							
								                EditorGUILayout.Toggle(
							 | 
						|||
| 
								 | 
							
								                    new GUIContent("Show Cursor",
							 | 
						|||
| 
								 | 
							
								                        "Automatically set the cursor to visible when the debug panel is opened, and revert when closed."),
							 | 
						|||
| 
								 | 
							
								                    Settings.Instance.AutomaticallyShowCursor);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // Expand content area to fit all available space
							 | 
						|||
| 
								 | 
							
								            GUILayout.FlexibleSpace();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private void DrawTabLayout()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label("Pinned Tool Positions", SRDebugEditorUtil.Styles.HeaderLabel);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.BeginHorizontal();
							 | 
						|||
| 
								 | 
							
								            GUILayout.FlexibleSpace();
							 | 
						|||
| 
								 | 
							
								            var rect = GUILayoutUtility.GetRect(360, 210);
							 | 
						|||
| 
								 | 
							
								            GUILayout.FlexibleSpace();
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.EndHorizontal();
							 | 
						|||
| 
								 | 
							
								            SRDebugEditorUtil.DrawLayoutPreview(rect);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.BeginHorizontal();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                EditorGUILayout.BeginVertical();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                GUILayout.Label("Console", SRDebugEditorUtil.Styles.InspectorHeaderStyle);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                Settings.Instance.ConsoleAlignment =
							 | 
						|||
| 
								 | 
							
								                    (ConsoleAlignment) EditorGUILayout.EnumPopup(Settings.Instance.ConsoleAlignment);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                EditorGUILayout.EndVertical();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                EditorGUI.BeginDisabledGroup(Settings.Instance.EnableTrigger == Settings.TriggerEnableModes.Off);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                EditorGUILayout.BeginVertical();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                GUILayout.Label("Entry Trigger", SRDebugEditorUtil.Styles.InspectorHeaderStyle);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                Settings.Instance.TriggerPosition =
							 | 
						|||
| 
								 | 
							
								                    (PinAlignment) EditorGUILayout.EnumPopup(Settings.Instance.TriggerPosition);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                EditorGUILayout.EndVertical();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                EditorGUI.EndDisabledGroup();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.EndHorizontal();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.BeginHorizontal();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                EditorGUILayout.BeginVertical();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                GUILayout.Label("Profiler", SRDebugEditorUtil.Styles.InspectorHeaderStyle);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                Settings.Instance.ProfilerAlignment =
							 | 
						|||
| 
								 | 
							
								                    (PinAlignment) EditorGUILayout.EnumPopup((ProfilerAlignment)Settings.Instance.ProfilerAlignment);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                EditorGUILayout.EndVertical();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                EditorGUILayout.BeginVertical();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                GUILayout.Label("Options", SRDebugEditorUtil.Styles.InspectorHeaderStyle);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                Settings.Instance.OptionsAlignment =
							 | 
						|||
| 
								 | 
							
								                    (PinAlignment) EditorGUILayout.EnumPopup((OptionsAlignment)Settings.Instance.OptionsAlignment);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                EditorGUILayout.EndVertical();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.EndHorizontal();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // Expand content area to fit all available space
							 | 
						|||
| 
								 | 
							
								            GUILayout.FlexibleSpace();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private bool _enableButton;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private void DrawTabBugReporter()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            if (_showBugReportSignupForm)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                DrawBugReportSignupForm();
							 | 
						|||
| 
								 | 
							
								                return;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label("Bug Reporter", SRDebugEditorUtil.Styles.HeaderLabel);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUI.BeginDisabledGroup(string.IsNullOrEmpty(Settings.Instance.ApiKey));
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Settings.Instance.EnableBugReporter = EditorGUILayout.Toggle("Enable Bug Reporter",
							 | 
						|||
| 
								 | 
							
								                Settings.Instance.EnableBugReporter);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUI.EndDisabledGroup();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.BeginHorizontal();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Settings.Instance.ApiKey = EditorGUILayout.TextField("API Key", Settings.Instance.ApiKey);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (GUILayout.Button("Verify", GUILayout.ExpandWidth(false)))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                EditorUtility.DisplayDialog("Verify API Key", ApiSignup.Verify(Settings.Instance.ApiKey), "OK");
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.EndHorizontal();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.Space();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label(
							 | 
						|||
| 
								 | 
							
								                "If you need to change your account email address, or have any other questions or concerns, please email us at contact@stompyrobot.uk.",
							 | 
						|||
| 
								 | 
							
								                SRDebugEditorUtil.Styles.ParagraphLabel);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.FlexibleSpace();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (!string.IsNullOrEmpty(Settings.Instance.ApiKey))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                GUILayout.Label("Reset", SRDebugEditorUtil.Styles.InspectorHeaderStyle);
							 | 
						|||
| 
								 | 
							
								                GUILayout.Label("Click the button below to clear the API key and show the signup form.",
							 | 
						|||
| 
								 | 
							
								                    SRDebugEditorUtil.Styles.ParagraphLabel);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                EditorGUILayout.BeginHorizontal();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                _enableButton = EditorGUILayout.Toggle("Enable Button", _enableButton, GUILayout.ExpandWidth(false));
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                EditorGUI.BeginDisabledGroup(!_enableButton);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if (GUILayout.Button("Reset"))
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    Settings.Instance.ApiKey = null;
							 | 
						|||
| 
								 | 
							
								                    Settings.Instance.EnableBugReporter = false;
							 | 
						|||
| 
								 | 
							
								                    _enableButton = false;
							 | 
						|||
| 
								 | 
							
								                    _showBugReportSignupForm = true;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                EditorGUI.EndDisabledGroup();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                EditorGUILayout.EndHorizontal();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                EditorGUILayout.Space();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            else
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                if (GUILayout.Button("Show Signup Form"))
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    _showBugReportSignupForm = true;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private string _invoiceNumber;
							 | 
						|||
| 
								 | 
							
								        private string _emailAddress;
							 | 
						|||
| 
								 | 
							
								        private bool _agreeLegal;
							 | 
						|||
| 
								 | 
							
								        private string _errorMessage;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private void DrawBugReportSignupForm()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            var isWeb = false;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#if UNITY_WEBPLAYER
							 | 
						|||
| 
								 | 
							
											EditorGUILayout.HelpBox("Signup form is not available when build target is Web Player.", MessageType.Error);
							 | 
						|||
| 
								 | 
							
											isWeb = true;
							 | 
						|||
| 
								 | 
							
								#endif
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUI.BeginDisabledGroup(isWeb || !_enableTabChange);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label("Signup Form", SRDebugEditorUtil.Styles.HeaderLabel);
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label(
							 | 
						|||
| 
								 | 
							
								                "SRDebugger requires a free API key to enable the bug reporter system. This form will acquire one for you.",
							 | 
						|||
| 
								 | 
							
								                SRDebugEditorUtil.Styles.ParagraphLabel);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (
							 | 
						|||
| 
								 | 
							
								                SRDebugEditorUtil.ClickableLabel(
							 | 
						|||
| 
								 | 
							
								                    "Already got an API key? <color={0}>Click here</color>.".Fmt(SRDebugEditorUtil.Styles.LinkColour),
							 | 
						|||
| 
								 | 
							
								                    SRDebugEditorUtil.Styles.RichTextLabel))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                _showBugReportSignupForm = false;
							 | 
						|||
| 
								 | 
							
								                Repaint();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.Space();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label("Invoice/Order Number", EditorStyles.boldLabel);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label(
							 | 
						|||
| 
								 | 
							
								                "Enter the order number from your Asset Store purchase email.",
							 | 
						|||
| 
								 | 
							
								                EditorStyles.miniLabel);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            _invoiceNumber = EditorGUILayout.TextField(_invoiceNumber);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.Space();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label("Email Address", EditorStyles.boldLabel);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label(
							 | 
						|||
| 
								 | 
							
								                "Provide an email address where the bug reports should be sent.",
							 | 
						|||
| 
								 | 
							
								                EditorStyles.miniLabel);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            _emailAddress = EditorGUILayout.TextField(_emailAddress);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.Space();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.BeginHorizontal();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (SRDebugEditorUtil.ClickableLabel(
							 | 
						|||
| 
								 | 
							
								                "I agree to the <color={0}>terms and conditions</color>.".Fmt(SRDebugEditorUtil.Styles.LinkColour),
							 | 
						|||
| 
								 | 
							
								                SRDebugEditorUtil.Styles.RichTextLabel))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                ApiSignupTermsWindow.Open();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            _agreeLegal = EditorGUILayout.Toggle(_agreeLegal);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.EndHorizontal();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.Space();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            var isEnabled = !string.IsNullOrEmpty(_invoiceNumber) && !string.IsNullOrEmpty(_emailAddress) && _agreeLegal;
							 | 
						|||
| 
								 | 
							
								            EditorGUI.BeginDisabledGroup(!isEnabled);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (GUILayout.Button("Submit"))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                _errorMessage = null;
							 | 
						|||
| 
								 | 
							
								                _enableTabChange = false;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                EditorApplication.delayCall += () =>
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    ApiSignup.SignUp(_emailAddress, _invoiceNumber, OnSignupResult);
							 | 
						|||
| 
								 | 
							
								                    Repaint();
							 | 
						|||
| 
								 | 
							
								                };
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUI.EndDisabledGroup();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (!string.IsNullOrEmpty(_errorMessage))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                EditorGUILayout.HelpBox(_errorMessage, MessageType.Error, true);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.FlexibleSpace();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label("Having trouble? Please email contact@stompyrobot.uk for assistance.",
							 | 
						|||
| 
								 | 
							
								                EditorStyles.miniLabel);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUI.EndDisabledGroup();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private void OnSignupResult(bool didSucceed, string apiKey, string email, string error)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            _enableTabChange = true;
							 | 
						|||
| 
								 | 
							
								            _selectedTab = Tabs.Bug_Reporter;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (!didSucceed)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                _errorMessage = error;
							 | 
						|||
| 
								 | 
							
								                return;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Settings.Instance.ApiKey = apiKey;
							 | 
						|||
| 
								 | 
							
								            Settings.Instance.EnableBugReporter = true;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorUtility.DisplayDialog("SRDebugger API",
							 | 
						|||
| 
								 | 
							
								                "API key has been created successfully. An email has been sent to your email address ({0}) with a verification link. You must verify your email before you can receive any bug reports."
							 | 
						|||
| 
								 | 
							
								                    .Fmt(email), "OK");
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            _showBugReportSignupForm = false;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private ReorderableList _keyboardShortcutList;
							 | 
						|||
| 
								 | 
							
								        private Vector2 _scrollPosition;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private void DrawTabShortcuts()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            if (_keyboardShortcutList == null)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                _keyboardShortcutList = new ReorderableList((IList) Settings.Instance.KeyboardShortcuts,
							 | 
						|||
| 
								 | 
							
								                    typeof (Settings.KeyboardShortcut), false, true, true, true);
							 | 
						|||
| 
								 | 
							
								                _keyboardShortcutList.drawHeaderCallback = DrawKeyboardListHeaderCallback;
							 | 
						|||
| 
								 | 
							
								                _keyboardShortcutList.drawElementCallback = DrawKeyboardListItemCallback;
							 | 
						|||
| 
								 | 
							
								                _keyboardShortcutList.onAddCallback += OnAddKeyboardListCallback;
							 | 
						|||
| 
								 | 
							
								                _keyboardShortcutList.onRemoveCallback += OnRemoveKeyboardListCallback;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.Space();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.BeginHorizontal();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Settings.Instance.EnableKeyboardShortcuts = EditorGUILayout.Toggle(
							 | 
						|||
| 
								 | 
							
								                new GUIContent("Enable", SRDebugStrings.Current.SettingsKeyboardShortcutsTooltip),
							 | 
						|||
| 
								 | 
							
								                Settings.Instance.EnableKeyboardShortcuts);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUI.BeginDisabledGroup(!Settings.Instance.EnableKeyboardShortcuts);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Settings.Instance.KeyboardEscapeClose =
							 | 
						|||
| 
								 | 
							
								                EditorGUILayout.Toggle(
							 | 
						|||
| 
								 | 
							
								                    new GUIContent("Close on Esc", SRDebugStrings.Current.SettingsCloseOnEscapeTooltip),
							 | 
						|||
| 
								 | 
							
								                    Settings.Instance.KeyboardEscapeClose);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.EndHorizontal();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.Separator();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            var dupe = DetectDuplicateKeyboardShortcuts();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (dupe != null)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                var shortcut = "";
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if (dupe.Control)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    shortcut += "Ctrl";
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if (dupe.Shift)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    if (shortcut.Length > 0)
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        shortcut += "-";
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                    shortcut += "Shift";
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if (dupe.Alt)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    if (shortcut.Length > 0)
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        shortcut += "-";
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                    shortcut += "Alt";
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if (shortcut.Length > 0)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    shortcut += "-";
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                shortcut += dupe.Key;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                EditorGUILayout.HelpBox(
							 | 
						|||
| 
								 | 
							
								                    "Duplicate shortcut ({0}). Only one shortcut per key is supported.".Fmt(shortcut),
							 | 
						|||
| 
								 | 
							
								                    MessageType.Warning);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            _scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition, false, false,
							 | 
						|||
| 
								 | 
							
								                GUILayout.Width(position.width - 11));
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.BeginVertical(GUILayout.Width(position.width - 30));
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            _keyboardShortcutList.DoLayoutList();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.FlexibleSpace();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.EndVertical();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.EndScrollView();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUI.EndDisabledGroup();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private void DrawTabAdvanced()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            _scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition, false, true);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label("Console", SRDebugEditorUtil.Styles.InspectorHeaderStyle);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Settings.Instance.CollapseDuplicateLogEntries =
							 | 
						|||
| 
								 | 
							
								                EditorGUILayout.Toggle(
							 | 
						|||
| 
								 | 
							
								                    new GUIContent("Collapse Log Entries", "Collapse duplicate log entries into single log."),
							 | 
						|||
| 
								 | 
							
								                    Settings.Instance.CollapseDuplicateLogEntries);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Settings.Instance.RichTextInConsole =
							 | 
						|||
| 
								 | 
							
								                EditorGUILayout.Toggle(
							 | 
						|||
| 
								 | 
							
								                    new GUIContent("Rich Text in Console", "Parse rich text tags in console log entries."),
							 | 
						|||
| 
								 | 
							
								                    Settings.Instance.RichTextInConsole);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Settings.Instance.MaximumConsoleEntries =
							 | 
						|||
| 
								 | 
							
								                EditorGUILayout.IntSlider(
							 | 
						|||
| 
								 | 
							
								                    new GUIContent("Max Console Entries",
							 | 
						|||
| 
								 | 
							
								                        "The maximum size of the console buffer. Higher values may cause performance issues on slower devices."),
							 | 
						|||
| 
								 | 
							
								                    Settings.Instance.MaximumConsoleEntries, 100, 6000);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.Separator();
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label("Display", SRDebugEditorUtil.Styles.InspectorHeaderStyle);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Settings.Instance.EnableBackgroundTransparency =
							 | 
						|||
| 
								 | 
							
								                EditorGUILayout.Toggle(new GUIContent("Transparent Background"),
							 | 
						|||
| 
								 | 
							
								                    Settings.Instance.EnableBackgroundTransparency);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.BeginHorizontal();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.PrefixLabel(new GUIContent("Layer", "The layer the debug panel UI will be drawn to"));
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Settings.Instance.DebugLayer = EditorGUILayout.LayerField(Settings.Instance.DebugLayer);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.EndHorizontal();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Settings.Instance.UseDebugCamera =
							 | 
						|||
| 
								 | 
							
								                EditorGUILayout.Toggle(
							 | 
						|||
| 
								 | 
							
								                    new GUIContent("Use Debug Camera", SRDebugStrings.Current.SettingsDebugCameraTooltip),
							 | 
						|||
| 
								 | 
							
								                    Settings.Instance.UseDebugCamera);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUI.BeginDisabledGroup(!Settings.Instance.UseDebugCamera);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Settings.Instance.DebugCameraDepth = EditorGUILayout.Slider(new GUIContent("Debug Camera Depth"),
							 | 
						|||
| 
								 | 
							
								                Settings.Instance.DebugCameraDepth, -100, 100);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUI.EndDisabledGroup();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Settings.Instance.UIScale =
							 | 
						|||
| 
								 | 
							
								                EditorGUILayout.Slider(new GUIContent("UI Scale"), Settings.Instance.UIScale, 1f, 3f);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.Separator();
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label("Enabled Tabs", SRDebugEditorUtil.Styles.InspectorHeaderStyle);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label(SRDebugStrings.Current.SettingsEnabledTabsDescription, EditorStyles.wordWrappedLabel);
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.Space();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            var disabledTabs = Settings.Instance.DisabledTabs.ToList();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            var tabNames = Enum.GetNames(typeof (DefaultTabs));
							 | 
						|||
| 
								 | 
							
								            var tabValues = Enum.GetValues(typeof (DefaultTabs));
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.BeginVertical(EditorStyles.inspectorDefaultMargins);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            var changed = false;
							 | 
						|||
| 
								 | 
							
								            for (var i = 0; i < tabNames.Length; i++)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                var tabName = tabNames[i];
							 | 
						|||
| 
								 | 
							
								                var tabValue = (DefaultTabs) (tabValues.GetValue(i));
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if (tabName == "BugReporter")
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    continue;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if (tabName == "SystemInformation")
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    tabName = "System Information";
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                EditorGUILayout.BeginHorizontal();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                var isEnabled = !disabledTabs.Contains(tabValue);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                var isNowEnabled = EditorGUILayout.ToggleLeft(tabName, isEnabled,
							 | 
						|||
| 
								 | 
							
								                    SRDebugEditorUtil.Styles.LeftToggleButton);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if (isEnabled && !isNowEnabled)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    disabledTabs.Add(tabValue);
							 | 
						|||
| 
								 | 
							
								                    changed = true;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                else if (!isEnabled && isNowEnabled)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    disabledTabs.Remove(tabValue);
							 | 
						|||
| 
								 | 
							
								                    changed = true;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                EditorGUILayout.EndHorizontal();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.EndVertical();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (changed)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                Settings.Instance.DisabledTabs = disabledTabs;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label("Other", SRDebugEditorUtil.Styles.InspectorHeaderStyle);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Settings.Instance.EnableEventSystemGeneration =
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.Toggle(
							 | 
						|||
| 
								 | 
							
								                new GUIContent("Automatic Event System", "Automatically create a UGUI EventSystem if none is found in the scene."),
							 | 
						|||
| 
								 | 
							
								                Settings.Instance.EnableEventSystemGeneration);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Settings.Instance.UnloadOnClose =
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.Toggle(
							 | 
						|||
| 
								 | 
							
								                new GUIContent("Unload When Closed", "Unload the debug panel from the scene when it is closed."),
							 | 
						|||
| 
								 | 
							
								                Settings.Instance.UnloadOnClose);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.HelpBox(
							 | 
						|||
| 
								 | 
							
								                "The panel loads again automatically when opened. You can always unload the panel by holding down the close button.",
							 | 
						|||
| 
								 | 
							
								                MessageType.Info);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.Separator();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (GUILayout.Button("Run Migrations"))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                Migrations.RunMigrations(true);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.EndScrollView();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #region Entry Code Utility
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private string GetEntryCodeString()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            var entryCode = Settings.Instance.EntryCode;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (entryCode.Count == 0)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                Settings.Instance.EntryCode = new[] {0, 0, 0, 0};
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            var code = "";
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            for (var i = 0; i < entryCode.Count; i++)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                code += entryCode[i];
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            return code;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private void UpdateEntryCode(string str)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            var newCode = new List<int>();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            for (var i = 0; i < str.Length; i++)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                newCode.Add(int.Parse(str[i].ToString(), NumberStyles.Integer));
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Settings.Instance.EntryCode = newCode;
							 | 
						|||
| 
								 | 
							
								            _currentEntryCode = GetEntryCodeString();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #region Keyboard Shortcut Utility
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private Settings.KeyboardShortcut DetectDuplicateKeyboardShortcuts()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            var s = Settings.Instance.KeyboardShortcuts;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            return
							 | 
						|||
| 
								 | 
							
								                s.FirstOrDefault(
							 | 
						|||
| 
								 | 
							
								                    shortcut =>
							 | 
						|||
| 
								 | 
							
								                        s.Any(
							 | 
						|||
| 
								 | 
							
								                            p =>
							 | 
						|||
| 
								 | 
							
								                                p != shortcut && p.Shift == shortcut.Shift && p.Control == shortcut.Control &&
							 | 
						|||
| 
								 | 
							
								                                p.Alt == shortcut.Alt &&
							 | 
						|||
| 
								 | 
							
								                                p.Key == shortcut.Key));
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private void DrawKeyboardListHeaderCallback(Rect rect)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            EditorGUI.LabelField(rect, "Keyboard Shortcuts");
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private void DrawKeyboardListItemCallback(Rect rect, int index, bool isActive, bool isFocused)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            var item = Settings.Instance.KeyboardShortcuts[index];
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            rect.y += 2;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            var buttonWidth = 40;
							 | 
						|||
| 
								 | 
							
								            var padding = 5;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            item.Control = GUI.Toggle(new Rect(rect.x, rect.y, buttonWidth, EditorGUIUtility.singleLineHeight),
							 | 
						|||
| 
								 | 
							
								                item.Control,
							 | 
						|||
| 
								 | 
							
								                "Ctrl", "Button");
							 | 
						|||
| 
								 | 
							
								            rect.x += buttonWidth + padding;
							 | 
						|||
| 
								 | 
							
								            rect.width -= buttonWidth + padding;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            item.Alt = GUI.Toggle(new Rect(rect.x, rect.y, buttonWidth, EditorGUIUtility.singleLineHeight), item.Alt,
							 | 
						|||
| 
								 | 
							
								                "Alt",
							 | 
						|||
| 
								 | 
							
								                "Button");
							 | 
						|||
| 
								 | 
							
								            rect.x += buttonWidth + padding;
							 | 
						|||
| 
								 | 
							
								            rect.width -= buttonWidth + padding;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            item.Shift = GUI.Toggle(new Rect(rect.x, rect.y, buttonWidth, EditorGUIUtility.singleLineHeight), item.Shift,
							 | 
						|||
| 
								 | 
							
								                "Shift",
							 | 
						|||
| 
								 | 
							
								                "Button");
							 | 
						|||
| 
								 | 
							
								            rect.x += buttonWidth + padding;
							 | 
						|||
| 
								 | 
							
								            rect.width -= buttonWidth + padding;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            item.Key =
							 | 
						|||
| 
								 | 
							
								                (KeyCode) EditorGUI.EnumPopup(new Rect(rect.x, rect.y, 80, EditorGUIUtility.singleLineHeight), item.Key);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            rect.x += 80 + padding;
							 | 
						|||
| 
								 | 
							
								            rect.width -= 80 + padding;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            item.Action =
							 | 
						|||
| 
								 | 
							
								                (Settings.ShortcutActions)
							 | 
						|||
| 
								 | 
							
								                    EditorGUI.EnumPopup(new Rect(rect.x, rect.y, rect.width - 4, EditorGUIUtility.singleLineHeight),
							 | 
						|||
| 
								 | 
							
								                        item.Action);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private void OnAddKeyboardListCallback(ReorderableList list)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            var shortcuts = Settings.Instance.KeyboardShortcuts.ToList();
							 | 
						|||
| 
								 | 
							
								            shortcuts.Add(new Settings.KeyboardShortcut());
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Settings.Instance.KeyboardShortcuts = shortcuts;
							 | 
						|||
| 
								 | 
							
								            list.list = (IList) Settings.Instance.KeyboardShortcuts;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private void OnRemoveKeyboardListCallback(ReorderableList list)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            var shortcuts = Settings.Instance.KeyboardShortcuts.ToList();
							 | 
						|||
| 
								 | 
							
								            shortcuts.RemoveAt(list.index);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Settings.Instance.KeyboardShortcuts = shortcuts;
							 | 
						|||
| 
								 | 
							
								            list.list = (IList) Settings.Instance.KeyboardShortcuts;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #endregion
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 |