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();
 | |
|         }
 | |
|     }
 | |
| }
 |