From b82da95b5181ac8bbae38efb13e950d5e88a4caa Mon Sep 17 00:00:00 2001 From: chai Date: Fri, 23 Oct 2020 13:08:43 +0800 Subject: =?UTF-8?q?*=E7=A7=BB=E5=8A=A8amplify=20shader=20editor=E5=88=B0th?= =?UTF-8?q?ird=20party=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Editor/Nodes/Master/FallbackPickerHelper.cs | 119 +++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FallbackPickerHelper.cs (limited to 'Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FallbackPickerHelper.cs') diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FallbackPickerHelper.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FallbackPickerHelper.cs new file mode 100644 index 00000000..6d006a96 --- /dev/null +++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/FallbackPickerHelper.cs @@ -0,0 +1,119 @@ +using System; +using UnityEngine; +using UnityEditor; + +namespace AmplifyShaderEditor +{ + [Serializable] + public class FallbackPickerHelper : ScriptableObject + { + private const string FallbackFormat = "Fallback \"{0}\""; + private const string FallbackShaderStr = "Fallback"; + private const string ShaderPoputContext = "CONTEXT/ShaderPopup"; + + private Material m_dummyMaterial; + private MenuCommand m_dummyCommand; + + [SerializeField] + private string m_fallbackShader = string.Empty; + + public void Init() + { + hideFlags = HideFlags.HideAndDontSave; + m_dummyMaterial = null; + m_dummyCommand = null; + } + + public void Draw( ParentNode owner ) + { + EditorGUILayout.BeginHorizontal(); + m_fallbackShader = owner.EditorGUILayoutTextField( FallbackShaderStr, m_fallbackShader ); + if ( GUILayout.Button( string.Empty, UIUtils.InspectorPopdropdownFallback, GUILayout.Width( 17 ), GUILayout.Height( 19 ) ) ) + { + EditorGUI.FocusTextInControl( null ); + GUI.FocusControl( null ); + DisplayShaderContext( owner, GUILayoutUtility.GetRect( GUIContent.none, EditorStyles.popup ) ); + } + EditorGUILayout.EndHorizontal(); + } + + private void DisplayShaderContext( ParentNode node, Rect r ) + { + if ( m_dummyCommand == null ) + m_dummyCommand = new MenuCommand( this, 0 ); + + if ( m_dummyMaterial == null ) + m_dummyMaterial = new Material( Shader.Find( "Hidden/ASESShaderSelectorUnlit" ) ); + +#pragma warning disable 0618 + UnityEditorInternal.InternalEditorUtility.SetupShaderMenu( m_dummyMaterial ); +#pragma warning restore 0618 + EditorUtility.DisplayPopupMenu( r, ShaderPoputContext, m_dummyCommand ); + } + + private void OnSelectedShaderPopup( string command, Shader shader ) + { + if ( shader != null ) + { + UIUtils.MarkUndoAction(); + Undo.RecordObject( this, "Selected fallback shader" ); + m_fallbackShader = shader.name; + } + } + + public void ReadFromString( ref uint index, ref string[] nodeParams ) + { + m_fallbackShader = nodeParams[ index++ ]; + } + + public void WriteToString( ref string nodeInfo ) + { + IOUtils.AddFieldValueToString( ref nodeInfo, m_fallbackShader ); + } + + public void Destroy() + { + GameObject.DestroyImmediate( m_dummyMaterial ); + m_dummyMaterial = null; + m_dummyCommand = null; + } + + public string TabbedFallbackShader + { + get + { + if( string.IsNullOrEmpty( m_fallbackShader ) ) + return string.Empty; + + return "\t" + string.Format( FallbackFormat, m_fallbackShader ) + "\n"; + } + } + + public string FallbackShader + { + get + { + if( string.IsNullOrEmpty( m_fallbackShader ) ) + return string.Empty; + + return string.Format( FallbackFormat, m_fallbackShader ); + } + } + + public string RawFallbackShader + { + get + { + return m_fallbackShader; + } + set + { + m_fallbackShader = value; + } + } + + + public bool Active { get { return !string.IsNullOrEmpty( m_fallbackShader ); } } + + } +} -- cgit v1.1-26-g67d0