You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CrowdControl/Assets/3rd/StompyRobot/SRDebugger/Scripts/Editor/WelcomeWindow.cs

185 lines
6.8 KiB
C#

1 month ago
#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<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
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 <color={0}>click here</color> 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 <color={0}>SRDebugger Settings</color> 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 <color={0}>online documentation</color>."
.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<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);
SRInternalEditorUtil.RenderGif(rect, _demoSprite, actualFrame, frameWidth, frameHeight, 5, framePadding,
framePadding);
GUILayout.FlexibleSpace();
EditorGUILayout.EndHorizontal();
}
}
}
#endif