#if !DISABLE_SRDEBUGGER using SRF; using UnityEditor; using UnityEngine; namespace SRDebugger.Editor { [InitializeOnLoad] 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(SRDebugEditorPaths.WelcomeItemPath)] public static void Open() { GetWindowWithRect(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 SRInternalEditorUtil.BeginDrawBackground(); SRInternalEditorUtil.DrawLogo(SRInternalEditorUtil.GetWelcomeLogo()); SRInternalEditorUtil.EndDrawBackground(); // Draw header/content divider EditorGUILayout.BeginVertical(SRInternalEditorUtil.Styles.SettingsHeaderBoxStyle); EditorGUILayout.EndVertical(); _scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition); GUILayout.Label("Welcome", SRInternalEditorUtil.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.", SRInternalEditorUtil.Styles.ParagraphLabel); if (SRInternalEditorUtil.ClickableLabel( "Note: For more detailed information click here to visit the online documentation." .Fmt(SRInternalEditorUtil.Styles.LinkColour), SRInternalEditorUtil.Styles.ParagraphLabel)) { Application.OpenURL(SRDebugEditorStrings.Current.SettingsDocumentationUrl); } GUILayout.Label("Quick Start", SRInternalEditorUtil.Styles.HeaderLabel); 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.", SRInternalEditorUtil.Styles.ParagraphLabel); GUILayout.Label( "By default, SRDebugger loads automatically when your game starts. " + "You can change this behaviour from the SRDebugger Settings window.", SRInternalEditorUtil.Styles.ParagraphLabel); DrawVideo(); EditorGUILayout.Space(); GUILayout.Label("Customization", SRInternalEditorUtil.Styles.HeaderLabel); if (SRInternalEditorUtil.ClickableLabel( "Many features of SRDebugger can be configured from the SRDebugger Settings window." .Fmt( SRInternalEditorUtil.Styles.LinkColour), SRInternalEditorUtil.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.", SRInternalEditorUtil.Styles.ParagraphLabel); GUILayout.Label("What Next?", SRInternalEditorUtil.Styles.HeaderLabel); if (SRInternalEditorUtil.ClickableLabel( "For more detailed information about SRDebugger's features or details about the Options Tab and script API, check the online documentation." .Fmt(SRInternalEditorUtil.Styles.LinkColour), SRInternalEditorUtil.Styles.ParagraphLabel)) { Application.OpenURL(SRDebugEditorStrings.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 as this helps us continue to provide updates and support to our users. ", SRInternalEditorUtil.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.", SRInternalEditorUtil.Styles.ParagraphLabel); SRInternalEditorUtil.DrawFooterLayout(position.width - 15); EditorGUILayout.EndScrollView(); Repaint(); } private void DrawVideo() { if (_demoSprite == null) { _demoSprite = SRInternalEditorUtil.LoadResource("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); SRInternalEditorUtil.RenderGif(rect, _demoSprite, actualFrame, frameWidth, frameHeight, 5, framePadding, framePadding); GUILayout.FlexibleSpace(); EditorGUILayout.EndHorizontal(); } } } #endif