You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

119 lines
2.8 KiB

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 ); } }
}
}