mergemilitary/Assets/ThirdPlugins/StompyRobot/SRDebugger/Scripts/Editor/WelcomeWindow.cs

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