209 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			209 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
								 | 
							
								using System;
							 | 
						|||
| 
								 | 
							
								using SRDebugger.Internal;
							 | 
						|||
| 
								 | 
							
								using SRDebugger.Internal.Editor;
							 | 
						|||
| 
								 | 
							
								using SRF;
							 | 
						|||
| 
								 | 
							
								using UnityEditor;
							 | 
						|||
| 
								 | 
							
								using UnityEngine;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								namespace SRDebugger.Editor
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								    [InitializeOnLoad]
							 | 
						|||
| 
								 | 
							
								    public class WelcomeWindow : EditorWindow
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        private const string WelcomeWindowPlayerPrefsKey = "SRDEBUGGER_WELCOME_SHOWN_VERSION";
							 | 
						|||
| 
								 | 
							
								        private Texture2D _demoSprite;
							 | 
						|||
| 
								 | 
							
								        private Vector2 _scrollPosition;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        static WelcomeWindow()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            EditorApplication.update += OpenUpdate;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private static void OpenUpdate()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            if (ShouldOpen())
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                Open();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorApplication.update -= OpenUpdate;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        [MenuItem(SRDebugPaths.WelcomeItemPath)]
							 | 
						|||
| 
								 | 
							
								        public static void Open()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            GetWindowWithRect<WelcomeWindow>(new Rect(0, 0, 449, 500), true, "SRDebugger - Welcome", true);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        public static bool ShouldOpen()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            var hasKey = EditorPrefs.HasKey(WelcomeWindowPlayerPrefsKey);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (!hasKey)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                return true;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            var value = EditorPrefs.GetString(WelcomeWindowPlayerPrefsKey);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (value != SRDebug.Version)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                return true;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            return false;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private void OnEnable()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            EditorPrefs.SetString(WelcomeWindowPlayerPrefsKey, SRDebug.Version);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private void OnGUI()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            // Draw header area 
							 | 
						|||
| 
								 | 
							
								            SRDebugEditorUtil.BeginDrawBackground();
							 | 
						|||
| 
								 | 
							
								            SRDebugEditorUtil.DrawLogo(SRDebugEditorUtil.GetWelcomeLogo());
							 | 
						|||
| 
								 | 
							
								            SRDebugEditorUtil.EndDrawBackground();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // Draw header/content divider
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.BeginVertical(SRDebugEditorUtil.Styles.SettingsHeaderBoxStyle);
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.EndVertical();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            _scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label("Welcome", SRDebugEditorUtil.Styles.HeaderLabel);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label(
							 | 
						|||
| 
								 | 
							
								                "Thank you for purchasing SRDebugger, your support is very much appreciated and we hope you find it useful for your project. " +
							 | 
						|||
| 
								 | 
							
								                "This window contains a quick guide to get to help get you started with SRDebugger.",
							 | 
						|||
| 
								 | 
							
								                SRDebugEditorUtil.Styles.ParagraphLabel);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (SRDebugEditorUtil.ClickableLabel(
							 | 
						|||
| 
								 | 
							
								                "Note: For more detailed information <color={0}>click here</color> to visit the online documentation."
							 | 
						|||
| 
								 | 
							
								                    .Fmt(SRDebugEditorUtil.Styles.LinkColour),
							 | 
						|||
| 
								 | 
							
								                SRDebugEditorUtil.Styles.ParagraphLabel))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                Application.OpenURL(SRDebugStrings.Current.SettingsDocumentationUrl);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#if UNITY_5_3_0 || UNITY_5_3_1 || UNITY_5_3_2
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.HelpBox(
							 | 
						|||
| 
								 | 
							
								                "On Unity versions prior to 5.3.3 there is a bug causing errors to be printed to the console when using the docked tools. Please upgrade to at least Unity 5.3.3 to prevent this bug.",
							 | 
						|||
| 
								 | 
							
								                MessageType.Warning, true);
							 | 
						|||
| 
								 | 
							
								#endif
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label("Quick Start", SRDebugEditorUtil.Styles.HeaderLabel);
							 | 
						|||
| 
								 | 
							
								#if UNITY_5 || UNITY_5_3_OR_NEWER
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label(
							 | 
						|||
| 
								 | 
							
								                "Now that you have imported the package, you should find the trigger available in the top-left of your game window when in play mode. " +
							 | 
						|||
| 
								 | 
							
								                "Triple-clicking this trigger will bring up the debug panel. The trigger is hidden until clicked.",
							 | 
						|||
| 
								 | 
							
								                SRDebugEditorUtil.Styles.ParagraphLabel);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label(
							 | 
						|||
| 
								 | 
							
								                "By default, SRDebugger loads automatically when your game starts. " +
							 | 
						|||
| 
								 | 
							
								                "You can change this behaviour from the SRDebugger Settings window.",
							 | 
						|||
| 
								 | 
							
								                SRDebugEditorUtil.Styles.ParagraphLabel);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#else
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label(
							 | 
						|||
| 
								 | 
							
								                "Drag the <b>SRDebugger.Init</b> prefab into the first scene of your game. " +
							 | 
						|||
| 
								 | 
							
								                "Once initialised, SRDebugger will be available even after loading new scenes. We recommend adding the SRDebugger.Init prefab to the first scene " +
							 | 
						|||
| 
								 | 
							
								                "of your game so that the debug panel is available in all subsequent scenes.",
							 | 
						|||
| 
								 | 
							
								                SRDebugEditorUtil.Styles.ParagraphLabel);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label(
							 | 
						|||
| 
								 | 
							
								                "Once the prefab is in your scene, you should find the trigger available in the top-left of your game window when in play mode. " +
							 | 
						|||
| 
								 | 
							
								                "Triple-clicking this trigger will bring up the debug panel. The trigger is hidden until clicked.",
							 | 
						|||
| 
								 | 
							
								                SRDebugEditorUtil.Styles.ParagraphLabel);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#endif
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            DrawVideo();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.Space();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label("Customization", SRDebugEditorUtil.Styles.HeaderLabel);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (SRDebugEditorUtil.ClickableLabel(
							 | 
						|||
| 
								 | 
							
								                "Many features of SRDebugger can be configured from the <color={0}>SRDebugger Settings</color> window."
							 | 
						|||
| 
								 | 
							
								                    .Fmt(
							 | 
						|||
| 
								 | 
							
								                        SRDebugEditorUtil.Styles.LinkColour), SRDebugEditorUtil.Styles.ParagraphLabel))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                SRDebuggerSettingsWindow.Open();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label(
							 | 
						|||
| 
								 | 
							
								                "From the settings window you can configure loading behaviour, trigger position, docked tools layout, and more. " +
							 | 
						|||
| 
								 | 
							
								                "You can enable the bug reporter service by using the sign-up form to get a free API key.",
							 | 
						|||
| 
								 | 
							
								                SRDebugEditorUtil.Styles.ParagraphLabel);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label("What Next?", SRDebugEditorUtil.Styles.HeaderLabel);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (SRDebugEditorUtil.ClickableLabel(
							 | 
						|||
| 
								 | 
							
								                "For more detailed information about SRDebugger's features or details about the Options Tab and script API, check the <color={0}>online documentation</color>."
							 | 
						|||
| 
								 | 
							
								                    .Fmt(SRDebugEditorUtil.Styles.LinkColour), SRDebugEditorUtil.Styles.ParagraphLabel))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                Application.OpenURL(SRDebugStrings.Current.SettingsDocumentationUrl);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label(
							 | 
						|||
| 
								 | 
							
								                "Thanks again for purchasing SRDebugger. " +
							 | 
						|||
| 
								 | 
							
								                "If you find it useful please consider leaving a rating or review on the Asset Store page to help us spread the word. ",
							 | 
						|||
| 
								 | 
							
								                SRDebugEditorUtil.Styles.ParagraphLabel);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.Label(
							 | 
						|||
| 
								 | 
							
								                "If you have any questions or concerns please do not hesitate to get in touch with us via email or the Unity forums.",
							 | 
						|||
| 
								 | 
							
								                SRDebugEditorUtil.Styles.ParagraphLabel);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            SRDebugEditorUtil.DrawFooterLayout(position.width - 15);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.EndScrollView();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Repaint();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private void DrawVideo()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            if (_demoSprite == null)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                _demoSprite = SRDebugEditorUtil.LoadResource<Texture2D>("Editor/DemoSprite.png");
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (_demoSprite == null)
							 | 
						|||
| 
								 | 
							
								                return;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            var frameWidth = 400;
							 | 
						|||
| 
								 | 
							
								            var frameHeight = 300;
							 | 
						|||
| 
								 | 
							
								            var framePadding = 0;
							 | 
						|||
| 
								 | 
							
								            var extraFramesStart = 5;
							 | 
						|||
| 
								 | 
							
								            var extraFramesEnd = 20;
							 | 
						|||
| 
								 | 
							
								            var totalFrames = 29;
							 | 
						|||
| 
								 | 
							
								            var fps = 16f;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.Space();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.BeginHorizontal();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.FlexibleSpace();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            var rect = GUILayoutUtility.GetRect(400*0.75f, 300*0.75f, GUILayout.ExpandHeight(false),
							 | 
						|||
| 
								 | 
							
								                GUILayout.ExpandWidth(false));
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            var frame = ((int) (EditorApplication.timeSinceStartup*fps))%
							 | 
						|||
| 
								 | 
							
								                        (totalFrames + extraFramesStart + extraFramesEnd);
							 | 
						|||
| 
								 | 
							
								            frame -= extraFramesStart;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            var actualFrame = Mathf.Clamp(frame, 0, totalFrames);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            SRDebugEditorUtil.RenderGif(rect, _demoSprite, actualFrame, frameWidth, frameHeight, 5, framePadding,
							 | 
						|||
| 
								 | 
							
								                framePadding);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GUILayout.FlexibleSpace();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            EditorGUILayout.EndHorizontal();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 |