summaryrefslogtreecommitdiff
path: root/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Utils/ASEStartScreen.cs
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2020-10-23 13:08:43 +0800
committerchai <chaifix@163.com>2020-10-23 13:08:43 +0800
commitb82da95b5181ac8bbae38efb13e950d5e88a4caa (patch)
tree48a6f3269276484bbc7cfc95f0651f40a2176aa1 /Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Utils/ASEStartScreen.cs
parent917e9e0b320775634dc2e710f7deac74fd0822f0 (diff)
*移动amplify shader editor到third party目录
Diffstat (limited to 'Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Utils/ASEStartScreen.cs')
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Utils/ASEStartScreen.cs495
1 files changed, 495 insertions, 0 deletions
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Utils/ASEStartScreen.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Utils/ASEStartScreen.cs
new file mode 100644
index 00000000..c11cf8ba
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Utils/ASEStartScreen.cs
@@ -0,0 +1,495 @@
+// Amplify Shader Editor - Visual Shader Editing Tool
+// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
+
+using UnityEngine;
+using UnityEditor;
+using System;
+using UnityEngine.Networking;
+using System.Collections;
+
+namespace AmplifyShaderEditor
+{
+ public class ASEStartScreen : EditorWindow
+ {
+ [MenuItem( "Window/Amplify Shader Editor/Start Screen", false, 1999 )]
+ public static void Init()
+ {
+ ASEStartScreen window = (ASEStartScreen)GetWindow( typeof( ASEStartScreen ), true, "Amplify Shader Editor Start Screen" );
+ window.minSize = new Vector2( 650, 500 );
+ window.maxSize = new Vector2( 650, 500 );
+ window.Show();
+ }
+
+ private static readonly string ChangeLogGUID = "580cccd3e608b7f4cac35ea46d62d429";
+ private static readonly string ResourcesGUID = "c0a0a980c9ba86345bc15411db88d34f";
+ private static readonly string BuiltInGUID = "e00e6f90ab8233e46a41c5e33917c642";
+ private static readonly string UniversalGUID = "a9d68dd8913f05d4d9ce75e7b40c6044";
+ private static readonly string HighDefinitionGUID = "d1c0b77896049554fa4b635531caf741";
+ private static readonly string OLDHighDefinitionGUID = "dff05fea7446d7b4e9029bfab77455d2";
+ private static readonly string LightWeightGUID = "6ecbfd0a046659943a69328c98ff0442";
+ private static readonly string OLDLightWeightGUID = "f7c4e22642de60d448f4e4809190f7b1";
+
+ private static readonly string IconGUID = "2c6536772776dd84f872779990273bfc";
+
+ public static readonly string ChangelogURL = "http://amplify.pt/Banner/ASEchangelog.json";
+
+ private static readonly string ManualURL = "http://wiki.amplify.pt/index.php?title=Unity_Products:Amplify_Shader_Editor/Manual";
+ private static readonly string BasicURL = "http://wiki.amplify.pt/index.php?title=Unity_Products:Amplify_Shader_Editor/Tutorials#Official_-_Basics";
+ private static readonly string BeginnerURL = "http://wiki.amplify.pt/index.php?title=Unity_Products:Amplify_Shader_Editor/Tutorials#Official_-_Beginner_Series";
+ private static readonly string NodesURL = "http://wiki.amplify.pt/index.php?title=Unity_Products:Amplify_Shader_Editor/Nodes";
+ private static readonly string SRPURL = "http://wiki.amplify.pt/index.php?title=Unity_Products:Amplify_Shader_Editor/Scriptable_Rendering_Pipeline";
+ private static readonly string FunctionsURL = "http://wiki.amplify.pt/index.php?title=Unity_Products:Amplify_Shader_Editor/Manual#Shader_Functions";
+ private static readonly string TemplatesURL = "http://wiki.amplify.pt/index.php?title=Unity_Products:Amplify_Shader_Editor/Templates";
+ private static readonly string APIURL = "http://wiki.amplify.pt/index.php?title=Unity_Products:Amplify_Shader_Editor/API";
+
+ private static readonly string DiscordURL = "https://discordapp.com/invite/EdrVAP5";
+ private static readonly string ForumURL = "https://forum.unity.com/threads/best-tool-asset-store-award-amplify-shader-editor-node-based-shader-creation-tool.430959/";
+
+ private static readonly string SiteURL = "http://amplify.pt/download/";
+ private static readonly string StoreURL = "https://assetstore.unity.com/packages/tools/visual-scripting/amplify-shader-editor-68570";
+
+ private static readonly GUIContent SamplesTitle = new GUIContent( "Shader Samples", "Import samples according to you project rendering pipeline" );
+ private static readonly GUIContent ResourcesTitle = new GUIContent( "Learning Resources", "Check the online wiki for various topics about how to use ASE with node examples and explanations" );
+ private static readonly GUIContent CommunityTitle = new GUIContent( "Community", "Need help? Reach us through our discord server or the offitial support Unity forum" );
+ private static readonly GUIContent UpdateTitle = new GUIContent( "Latest Update", "Check the lastest additions, improvements and bug fixes done to ASE" );
+ private static readonly GUIContent ASETitle = new GUIContent( "Amplify Shader Editor", "Are you using the latest version? Now you know" );
+
+ private static readonly string DownArrow = "\u25BC";
+#if UNITY_2019_3_OR_NEWER
+ private int DownButtonSize = 22;
+#else
+ private int DownButtonSize = 21;
+#endif
+
+ Vector2 m_scrollPosition = Vector2.zero;
+ Preferences.ShowOption m_startup = Preferences.ShowOption.Never;
+ bool m_showLWRP = false;
+ bool m_showHDRP = false;
+
+ [NonSerialized]
+ Texture packageIcon = null;
+ [NonSerialized]
+ Texture textIcon = null;
+ [NonSerialized]
+ Texture webIcon = null;
+
+ GUIContent HDRPbutton = null;
+ GUIContent HDRPOLDbutton = null;
+ GUIContent URPbutton = null;
+ GUIContent LWRPbutton = null;
+ GUIContent LWRPOLDbutton = null;
+ GUIContent BuiltInbutton = null;
+
+ GUIContent Manualbutton = null;
+ GUIContent Basicbutton = null;
+ GUIContent Beginnerbutton = null;
+ GUIContent Nodesbutton = null;
+ GUIContent SRPusebutton = null;
+ GUIContent Functionsbutton = null;
+ GUIContent Templatesbutton = null;
+ GUIContent APIbutton = null;
+
+ GUIContent DiscordButton = null;
+ GUIContent ForumButton = null;
+
+ GUIContent ASEIcon = null;
+ RenderTexture rt;
+
+ [NonSerialized]
+ GUIStyle m_buttonStyle = null;
+ [NonSerialized]
+ GUIStyle m_buttonLeftStyle = null;
+ [NonSerialized]
+ GUIStyle m_buttonRightStyle = null;
+ [NonSerialized]
+ GUIStyle m_minibuttonStyle = null;
+ [NonSerialized]
+ GUIStyle m_labelStyle = null;
+ [NonSerialized]
+ GUIStyle m_linkStyle = null;
+
+ private ChangeLogInfo m_changeLog;
+ private bool m_infoDownloaded = false;
+ private string m_newVersion = string.Empty;
+
+ private void OnEnable()
+ {
+ rt = new RenderTexture( 16, 16, 0 );
+ rt.Create();
+
+ m_startup = (Preferences.ShowOption)EditorPrefs.GetInt( Preferences.PrefStartUp, 0 );
+
+ if( textIcon == null )
+ {
+ Texture icon = EditorGUIUtility.IconContent( "TextAsset Icon" ).image;
+ var cache = RenderTexture.active;
+ RenderTexture.active = rt;
+ Graphics.Blit( icon, rt );
+ RenderTexture.active = cache;
+ textIcon = rt;
+
+ Manualbutton = new GUIContent( " Manual", textIcon );
+ Basicbutton = new GUIContent( " Basic use tutorials", textIcon );
+ Beginnerbutton = new GUIContent( " Beginner Series", textIcon );
+ Nodesbutton = new GUIContent( " Node List", textIcon );
+ SRPusebutton = new GUIContent( " SRP HD/URP/LW use", textIcon );
+ Functionsbutton = new GUIContent( " Shader Functions", textIcon );
+ Templatesbutton = new GUIContent( " Shader Templates", textIcon );
+ APIbutton = new GUIContent( " Node API", textIcon );
+ }
+
+ if( packageIcon == null )
+ {
+ packageIcon = EditorGUIUtility.IconContent( "BuildSettings.Editor.Small" ).image;
+ HDRPbutton = new GUIContent( " HDRP Samples", packageIcon );
+ HDRPOLDbutton = new GUIContent( " HDRP Samples 6.X.X", packageIcon );
+ URPbutton = new GUIContent( " URP Samples", packageIcon );
+ LWRPbutton = new GUIContent( " LWRP Samples 6.X.X", packageIcon );
+ LWRPOLDbutton = new GUIContent( " LWRP Samples 3.X.X", packageIcon );
+ BuiltInbutton = new GUIContent( " Built-In Samples", packageIcon );
+ }
+
+ if( webIcon == null )
+ {
+ webIcon = EditorGUIUtility.IconContent( "BuildSettings.Web.Small" ).image;
+ DiscordButton = new GUIContent( " Discord", webIcon );
+ ForumButton = new GUIContent( " Unity Forum", webIcon );
+ }
+
+ if( m_changeLog == null )
+ {
+ var changelog = AssetDatabase.LoadAssetAtPath<TextAsset>( AssetDatabase.GUIDToAssetPath( ChangeLogGUID ) );
+ string lastUpdate = string.Empty;
+ if(changelog != null )
+ {
+ lastUpdate = changelog.text.Substring( 0, changelog.text.IndexOf( "\nv", 50 ) );// + "\n...";
+ lastUpdate = lastUpdate.Replace( " *", " \u25CB" );
+ lastUpdate = lastUpdate.Replace( "* ", "\u2022 " );
+ }
+ m_changeLog = new ChangeLogInfo( VersionInfo.FullNumber, lastUpdate );
+ }
+
+ if( ASEIcon == null )
+ {
+ ASEIcon = new GUIContent( AssetDatabase.LoadAssetAtPath<Texture2D>( AssetDatabase.GUIDToAssetPath( IconGUID ) ) );
+ }
+ }
+
+ private void OnDisable()
+ {
+ if( rt != null )
+ {
+ rt.Release();
+ DestroyImmediate( rt );
+ }
+ }
+
+ public void OnGUI()
+ {
+ if( !m_infoDownloaded )
+ {
+ m_infoDownloaded = true;
+
+ StartBackgroundTask( StartRequest( ChangelogURL, () =>
+ {
+ var temp = ChangeLogInfo.CreateFromJSON( www.downloadHandler.text );
+ if( temp != null && temp.Version >= m_changeLog.Version )
+ {
+ m_changeLog = temp;
+ }
+ // improve this later
+ int major = m_changeLog.Version / 10000;
+ int minor = ( m_changeLog.Version / 1000 ) - major * 10;
+ int release = ( m_changeLog.Version / 100 ) - major * 100 - minor * 10;
+ int revision = ( ( m_changeLog.Version / 10 ) - major * 1000 - minor * 100 - release * 10 ) + ( m_changeLog.Version - major * 10000 - minor * 1000 - release * 100 );
+ m_newVersion = major + "." + minor + "." + release + "r" + revision;
+ Repaint();
+ } ) );
+ }
+
+ if( m_buttonStyle == null )
+ {
+ m_buttonStyle = new GUIStyle( GUI.skin.button );
+ m_buttonStyle.alignment = TextAnchor.MiddleLeft;
+ }
+
+ if( m_buttonLeftStyle == null )
+ {
+ m_buttonLeftStyle = new GUIStyle( "ButtonLeft" );
+ m_buttonLeftStyle.alignment = TextAnchor.MiddleLeft;
+ m_buttonLeftStyle.margin = m_buttonStyle.margin;
+ m_buttonLeftStyle.margin.right = 0;
+ }
+
+ if( m_buttonRightStyle == null )
+ {
+ m_buttonRightStyle = new GUIStyle( "ButtonRight" );
+ m_buttonRightStyle.alignment = TextAnchor.MiddleLeft;
+ m_buttonRightStyle.margin = m_buttonStyle.margin;
+ m_buttonRightStyle.margin.left = 0;
+ }
+
+ if( m_minibuttonStyle == null )
+ {
+ m_minibuttonStyle = new GUIStyle( "MiniButton" );
+ m_minibuttonStyle.alignment = TextAnchor.MiddleLeft;
+ m_minibuttonStyle.margin = m_buttonStyle.margin;
+ m_minibuttonStyle.margin.left = 20;
+ m_minibuttonStyle.normal.textColor = m_buttonStyle.normal.textColor;
+ m_minibuttonStyle.hover.textColor = m_buttonStyle.hover.textColor;
+ }
+
+ if( m_labelStyle == null )
+ {
+ m_labelStyle = new GUIStyle( "BoldLabel" );
+ m_labelStyle.margin = new RectOffset( 4, 4, 4, 4 );
+ m_labelStyle.padding = new RectOffset( 2, 2, 2, 2 );
+ m_labelStyle.fontSize = 13;
+ }
+
+ if( m_linkStyle == null )
+ {
+ var inv = AssetDatabase.LoadAssetAtPath<Texture2D>( AssetDatabase.GUIDToAssetPath( "1004d06b4b28f5943abdf2313a22790a" ) ); // find a better solution for transparent buttons
+ m_linkStyle = new GUIStyle();
+ m_linkStyle.normal.textColor = new Color( 0.2980392f, 0.4901961f, 1f );
+ m_linkStyle.hover.textColor = Color.white;
+ m_linkStyle.active.textColor = Color.grey;
+ m_linkStyle.margin.top = 3;
+ m_linkStyle.margin.bottom = 2;
+ m_linkStyle.hover.background = inv;
+ m_linkStyle.active.background = inv;
+ }
+
+ EditorGUILayout.BeginHorizontal( GUIStyle.none, GUILayout.ExpandWidth( true ) );
+ {
+ // left column
+ EditorGUILayout.BeginVertical( GUILayout.Width( 175 ) );
+ {
+ GUILayout.Label( SamplesTitle, m_labelStyle );
+ EditorGUILayout.BeginHorizontal();
+ if( GUILayout.Button( HDRPbutton, m_buttonLeftStyle ) )
+ ImportSample( HDRPbutton.text, HighDefinitionGUID );
+
+ if( GUILayout.Button( DownArrow, m_buttonRightStyle, GUILayout.Width( DownButtonSize ), GUILayout.Height( DownButtonSize ) ) )
+ {
+ m_showHDRP = !m_showHDRP;
+ m_showLWRP = false;
+ }
+ EditorGUILayout.EndHorizontal();
+ if( m_showHDRP )
+ {
+ if( GUILayout.Button( HDRPOLDbutton, m_minibuttonStyle ) )
+ ImportSample( HDRPOLDbutton.text, OLDHighDefinitionGUID );
+ }
+ EditorGUILayout.BeginHorizontal();
+ if( GUILayout.Button( URPbutton, m_buttonLeftStyle ) )
+ ImportSample( URPbutton.text, UniversalGUID );
+
+ if( GUILayout.Button( DownArrow, m_buttonRightStyle, GUILayout.Width( DownButtonSize ), GUILayout.Height( DownButtonSize ) ) )
+ {
+ m_showLWRP = !m_showLWRP;
+ m_showHDRP = false;
+ }
+ EditorGUILayout.EndHorizontal();
+ if( m_showLWRP )
+ {
+ EditorGUILayout.BeginVertical();
+ if( GUILayout.Button( LWRPbutton, m_minibuttonStyle ) )
+ ImportSample( LWRPbutton.text, LightWeightGUID );
+ if( GUILayout.Button( LWRPOLDbutton, m_minibuttonStyle ) )
+ ImportSample( LWRPOLDbutton.text, OLDLightWeightGUID );
+ EditorGUILayout.EndVertical();
+ }
+ if( GUILayout.Button( BuiltInbutton, m_buttonStyle ) )
+ ImportSample( BuiltInbutton.text, BuiltInGUID );
+
+ GUILayout.Space( 10 );
+
+ GUILayout.Label( ResourcesTitle, m_labelStyle );
+ if( GUILayout.Button( Manualbutton, m_buttonStyle ) )
+ Application.OpenURL( ManualURL );
+
+ if( GUILayout.Button( Basicbutton, m_buttonStyle ) )
+ Application.OpenURL( BasicURL );
+
+ if( GUILayout.Button( Beginnerbutton, m_buttonStyle ) )
+ Application.OpenURL( BeginnerURL );
+
+ if( GUILayout.Button( Nodesbutton, m_buttonStyle ) )
+ Application.OpenURL( NodesURL );
+
+ if( GUILayout.Button( SRPusebutton, m_buttonStyle ) )
+ Application.OpenURL( SRPURL );
+
+ if( GUILayout.Button( Functionsbutton, m_buttonStyle ) )
+ Application.OpenURL( FunctionsURL );
+
+ if( GUILayout.Button( Templatesbutton, m_buttonStyle ) )
+ Application.OpenURL( TemplatesURL );
+
+ if( GUILayout.Button( APIbutton, m_buttonStyle ) )
+ Application.OpenURL( APIURL );
+ }
+ EditorGUILayout.EndVertical();
+
+ // right column
+ EditorGUILayout.BeginVertical( GUILayout.Width( 650 - 175 - 9 ), GUILayout.ExpandHeight( true ) );
+ {
+ GUILayout.Label( CommunityTitle, m_labelStyle );
+ EditorGUILayout.BeginHorizontal( GUILayout.ExpandWidth( true ) );
+ {
+ if( GUILayout.Button( DiscordButton, GUILayout.ExpandWidth( true ) ) )
+ {
+ Application.OpenURL( DiscordURL );
+ }
+ if( GUILayout.Button( ForumButton, GUILayout.ExpandWidth( true ) ) )
+ {
+ Application.OpenURL( ForumURL );
+ }
+ }
+ EditorGUILayout.EndHorizontal();
+ GUILayout.Label( UpdateTitle, m_labelStyle );
+ m_scrollPosition = GUILayout.BeginScrollView( m_scrollPosition, "ProgressBarBack", GUILayout.ExpandHeight( true ), GUILayout.ExpandWidth( true ) );
+ GUILayout.Label( m_changeLog.LastUpdate, "WordWrappedMiniLabel", GUILayout.ExpandHeight( true ) );
+ GUILayout.EndScrollView();
+
+ EditorGUILayout.BeginHorizontal( GUILayout.ExpandWidth( true ) );
+ {
+ EditorGUILayout.BeginVertical();
+ GUILayout.Label( ASETitle, m_labelStyle );
+
+ GUILayout.Label( "Installed Version: " + VersionInfo.StaticToString() );
+
+ if( m_changeLog.Version > VersionInfo.FullNumber )
+ {
+ var cache = GUI.color;
+ GUI.color = Color.red;
+ GUILayout.Label( "New version available: " + m_newVersion, "BoldLabel" );
+ GUI.color = cache;
+ }
+ else
+ {
+ var cache = GUI.color;
+ GUI.color = Color.green;
+ GUILayout.Label( "You are using the latest version", "BoldLabel" );
+ GUI.color = cache;
+ }
+
+ EditorGUILayout.BeginHorizontal();
+ GUILayout.Label( "Download links:" );
+ if( GUILayout.Button( "Amplify", m_linkStyle ) )
+ Application.OpenURL( SiteURL );
+ GUILayout.Label( "-" );
+ if( GUILayout.Button( "Asset Store", m_linkStyle ) )
+ Application.OpenURL( StoreURL );
+ EditorGUILayout.EndHorizontal();
+ GUILayout.Space( 7 );
+ EditorGUILayout.EndVertical();
+
+ GUILayout.FlexibleSpace();
+ EditorGUILayout.BeginVertical();
+ GUILayout.Space( 7 );
+ GUILayout.Label( ASEIcon );
+ EditorGUILayout.EndVertical();
+ }
+ EditorGUILayout.EndHorizontal();
+ }
+ EditorGUILayout.EndVertical();
+ }
+ EditorGUILayout.EndHorizontal();
+
+
+ EditorGUILayout.BeginHorizontal( "ProjectBrowserBottomBarBg", GUILayout.ExpandWidth( true ), GUILayout.Height(22) );
+ {
+ GUILayout.FlexibleSpace();
+ EditorGUI.BeginChangeCheck();
+ var cache = EditorGUIUtility.labelWidth;
+ EditorGUIUtility.labelWidth = 100;
+ m_startup = (Preferences.ShowOption)EditorGUILayout.EnumPopup( "Show At Startup", m_startup, GUILayout.Width( 220 ) );
+ EditorGUIUtility.labelWidth = cache;
+ if( EditorGUI.EndChangeCheck() )
+ {
+ EditorPrefs.SetInt( Preferences.PrefStartUp, (int)m_startup );
+ }
+ }
+ EditorGUILayout.EndHorizontal();
+
+ // Find a better way to update link buttons without repainting the window
+ Repaint();
+ }
+
+ void ImportSample( string pipeline, string guid )
+ {
+ if( EditorUtility.DisplayDialog( "Import Sample", "This will import the samples for" + pipeline.Replace( " Samples", "" ) + ", please make sure the pipeline is properly installed and/or selected before importing the samples.\n\nContinue?", "Yes", "No" ) )
+ {
+ AssetDatabase.ImportPackage( AssetDatabase.GUIDToAssetPath( ResourcesGUID ), false );
+ AssetDatabase.ImportPackage( AssetDatabase.GUIDToAssetPath( guid ), false );
+ }
+ }
+
+ UnityWebRequest www;
+
+ IEnumerator StartRequest( string url, Action success = null )
+ {
+ using( www = UnityWebRequest.Get( url ) )
+ {
+#if UNITY_2017_2_OR_NEWER
+ yield return www.SendWebRequest();
+#else
+ yield return www.Send();
+#endif
+
+ while( www.isDone == false )
+ yield return null;
+
+ if( success != null )
+ success();
+ }
+ }
+
+ public static void StartBackgroundTask( IEnumerator update, Action end = null )
+ {
+ EditorApplication.CallbackFunction closureCallback = null;
+
+ closureCallback = () =>
+ {
+ try
+ {
+ if( update.MoveNext() == false )
+ {
+ if( end != null )
+ end();
+ EditorApplication.update -= closureCallback;
+ }
+ }
+ catch( Exception ex )
+ {
+ if( end != null )
+ end();
+ Debug.LogException( ex );
+ EditorApplication.update -= closureCallback;
+ }
+ };
+
+ EditorApplication.update += closureCallback;
+ }
+ }
+
+ [Serializable]
+ internal class ChangeLogInfo
+ {
+ public int Version;
+ public string LastUpdate;
+
+ public static ChangeLogInfo CreateFromJSON( string jsonString )
+ {
+ return JsonUtility.FromJson<ChangeLogInfo>( jsonString );
+ }
+
+ public ChangeLogInfo( int version, string lastUpdate )
+ {
+ Version = version;
+ LastUpdate = lastUpdate;
+ }
+ }
+}