/******************************************************************************/ /* 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 { 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(); 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($"{label}", 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(); } } }