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.

280 lines
8.9 KiB
C#

/******************************************************************************/
/*
Project - MudBun
Publisher - Long Bunny Labs
http://LongBunnyLabs.com
Author - Ming-Lun "Allen" Chou
http://AllenChou.net
*/
/******************************************************************************/
using UnityEditor;
using UnityEngine;
namespace MudBun
{
public class MudBunStartScreen : MudBunEditorWindowBase<MudBunStartScreen>
{
private static readonly int Width = 400;
private static readonly int Height = 670;
private static readonly int HeaderHeight = 180;
private static readonly string HeaderGuid = "da88b67353ce35b49827d6cccb8ab952";
public struct Links
{
public static readonly string Overview = "http://longbunnylabs.com/mudbun/";
public static readonly string QuickGuideVideo = "https://www.youtube.com/watch?v=s5Qrap0EW3M";
public static readonly string Manual = "http://longbunnylabs.com/mudbun-manual/";
public static readonly string ScriptingApi = "http://longbunnylabs.com/mudbun-documentation/api/MudBun.html";
public static readonly string Discord = "https://discord.gg/MEGuEFU";
public static readonly string Email = "mailto://LongBunnyLabs@gmail.com";
public static readonly string Website = "http://longbunnylabs.com/";
public static readonly string Blog = "http://allenchou.net/";
public static readonly string Twitter = "https://twitter.com/TheAllenChou";
public static readonly string Review = "https://assetstore.unity.com/packages/tools/particles-effects/mudbun-volumetric-vfx-modeling-177891#reviews";
}
private static GUIStyle VersionStyle =>
new GUIStyle("Label")
{
alignment = TextAnchor.UpperLeft,
normal = new GUIStyleState() { textColor = Color.black }
};
private static GUIStyle DefaultStyle =>
new GUIStyle("Label")
{
alignment = TextAnchor.UpperCenter,
fontSize = 12,
normal = new GUIStyleState() { textColor = Color.white }
};
private static GUIStyle HeaderStyle =>
new GUIStyle("Label")
{
alignment = TextAnchor.UpperCenter,
fontSize = 20,
fixedHeight = 25,
richText = true,
normal = new GUIStyleState() { textColor = Color.white }
};
private static MudBunStartScreen Instance;
public static void Open()
{
if (Instance == null)
{
Instance = GetWindow<MudBunStartScreen>();
Instance.titleContent = new GUIContent("MudBun Start Screen");
Instance.minSize = new Vector2(Width, Height);
Instance.maxSize = new Vector2(Width, Height);
Instance.position = new Rect(200.0f, 200.0f, Width, Height);
}
else
{
Instance.Focus();
}
}
private static string RenderPipelineName
{
get
{
switch (ResourcesUtil.RenderPipeline)
{
case ResourcesUtil.RenderPipelineEnum.BuiltIn: return "Built-In RP";
case ResourcesUtil.RenderPipelineEnum.URP: return "URP";
case ResourcesUtil.RenderPipelineEnum.HDRP: return "HDRP";
default: return "Unknown";
}
}
}
private static void Header(string label, int space = 8)
{
EditorGUILayout.LabelField($"<b>{label}</b>", HeaderStyle);
EditorGUILayout.Space(space);
}
private static void Label(string label)
{
EditorGUILayout.LabelField(label, DefaultStyle);
}
private static void Space(int size = 15)
{
EditorGUILayout.Space(size);
}
private void Paint()
{
EditorGUILayout.BeginVertical();
// background
GUI.color = Color.black;
GUI.DrawTexture(new Rect(0, 0, Width, Height + 50), EditorGUIUtility.whiteTexture);
GUI.color = Color.white;
// header
GUI.DrawTexture(new Rect(0, 0, Width, HeaderHeight), GetTexture(HeaderGuid));
// version
Space(115);
EditorGUILayout.BeginHorizontal();
Space(80);
EditorGUILayout.LabelField($"Version: {MudBun.Version}", VersionStyle);
GUILayout.FlexibleSpace();
EditorGUILayout.EndHorizontal();
// intro
EditorGUILayout.Space(5);
Header("Welcome to MudBun!");
Label($"Render pipeline detected: {RenderPipelineName}");
EditorGUILayout.BeginHorizontal();
GUILayout.Space(75);
GUILayout.Label("Show Start Screen:");
MudBunStartScreenLauncher.LaunchMode = (MudBunStartScreenLauncher.LaunchModeEnum) EditorGUILayout.EnumPopup(MudBunStartScreenLauncher.LaunchMode);
GUILayout.Space(75);
EditorGUILayout.EndHorizontal();
Space(2);
EditorGUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
if (GUILayout.Button("Refresh Compatibility"))
CompatibilityManager.KickCompatibilityScan(CompatibilityManager.PackageImportTarget.Required);
GUILayout.FlexibleSpace();
EditorGUILayout.EndHorizontal();
Space();
// getting started
Header("Getting Started");
EditorGUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
if (GUILayout.Button("Overview"))
Application.OpenURL(Links.Overview);
if (GUILayout.Button("Quick Guide Video"))
Application.OpenURL(Links.QuickGuideVideo);
if (GUILayout.Button("Import Examples"))
CompatibilityManager.KickCompatibilityScan(CompatibilityManager.PackageImportTarget.Examples);
GUILayout.FlexibleSpace();
EditorGUILayout.EndHorizontal();
Label("NOTE: There are different examples in different render pipelines");
Label("(BIRP: 23 / URP: 1 / HDRP: 24)");
Space();
// getting help
Header("Getting Help");
EditorGUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
if (GUILayout.Button("Manual"))
Application.OpenURL(Links.Manual);
if (GUILayout.Button("Scripting API"))
Application.OpenURL(Links.ScriptingApi);
if (GUILayout.Button("Discord"))
Application.OpenURL(Links.Discord);
if (GUILayout.Button("Email"))
Application.OpenURL(Links.Email);
GUILayout.FlexibleSpace();
EditorGUILayout.EndHorizontal();
Space();
// credits
Header("Long Bunny Labs", 5);
Label("Ming-Lun \"Allen\" Chou");
Space(1);
EditorGUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
if (GUILayout.Button("Website"))
Application.OpenURL(Links.Website);
if (GUILayout.Button("Blog"))
Application.OpenURL(Links.Blog);
if (GUILayout.Button("Twitter"))
Application.OpenURL(Links.Twitter);
GUILayout.FlexibleSpace();
EditorGUILayout.EndHorizontal();
Space();
// review
Header("Thanks for Getting MudBun!");
Label("If you like MudBun, please consider leaving a few kind words.");
Space(1);
EditorGUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
if (GUILayout.Button("Sure Thing"))
Application.OpenURL(Links.Review);
GUILayout.FlexibleSpace();
GUILayout.EndHorizontal();
Space();
EditorGUILayout.EndVertical();
ProjectPrefs.SetInt(MudBunStartScreenLauncher.LastRevisionKey, MudBun.Revision);
}
private void OnGUI()
{
Paint();
}
}
#if !MUDBUN_DEV
[InitializeOnLoad]
#endif
public class MudBunStartScreenLauncher
{
public enum LaunchModeEnum
{
// Never = 0,
OnNewerVersion = 1,
AtStartup = 2,
}
public static readonly string LaunchModeKey = "StartScreenLaunchMode";
public static readonly string LastRevisionKey = "StartScreenLastRevision";
public static LaunchModeEnum LaunchMode
{
get => (LaunchModeEnum) ProjectPrefs.GetInt(LaunchModeKey, (int) LaunchModeEnum.OnNewerVersion);
set { ProjectPrefs.SetInt(LaunchModeKey, (int) value); }
}
static MudBunStartScreenLauncher()
{
EditorApplication.update += Update;
}
static void Update()
{
EditorApplication.update -= Update;
// ugh
CompatibilityManager.TryInitialize();
bool shouldLaunch = false;
switch (LaunchMode)
{
/*
case LaunchModeEnum.Never:
shouldLaunch = false;
break;
*/
case LaunchModeEnum.OnNewerVersion:
int lastRevision = ProjectPrefs.GetInt(LastRevisionKey, -1);
shouldLaunch = (MudBun.Revision > lastRevision);
break;
case LaunchModeEnum.AtStartup:
shouldLaunch = (Time.realtimeSinceStartup < 10.0f);
break;
}
ProjectPrefs.SetInt(LastRevisionKey, MudBun.Revision);
if (shouldLaunch)
MudBunStartScreen.Open();
}
}
}