123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- using System;
- using UnityEngine;
- using UnityEditor;
- using System.Collections.Generic;
- namespace AmplifyShaderEditor
- {
- [Serializable]
- public class DependenciesData
- {
- private string DependencyFormat = "Dependency \"{0}\"=\"{1}\"\n";
- public string DependencyName;
- public string DependencyValue;
- public bool DependencyFoldout = true;
- public DependenciesData()
- {
- DependencyName = string.Empty;
- DependencyValue = string.Empty;
- }
- public DependenciesData( string data )
- {
- string[] arr = data.Split( IOUtils.VALUE_SEPARATOR );
- if( arr.Length > 1 )
- {
- DependencyName = arr[ 0 ];
- DependencyValue = arr[ 1 ];
- }
- }
- public override string ToString()
- {
- return DependencyName + IOUtils.VALUE_SEPARATOR + DependencyValue;
- }
- public string GenerateDependency()
- {
- return string.Format( DependencyFormat, DependencyName, DependencyValue );
- }
- public bool IsValid { get { return ( !string.IsNullOrEmpty( DependencyValue ) && !string.IsNullOrEmpty( DependencyName ) ); } }
- }
- [Serializable]
- public class DependenciesHelper
- {
- private const string CustomDependencysStr = " Dependencies";
- private const string DependencyNameStr = "Name";
- private const string DependencyValueStr = "Value";
- private const float ShaderKeywordButtonLayoutWidth = 15;
- private ParentNode m_currentOwner;
- [SerializeField]
- private List<DependenciesData> m_availableDependencies = new List<DependenciesData>();
- public void Draw( ParentNode owner, bool isNested = false )
- {
- m_currentOwner = owner;
- bool value = owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedDependencies;
- if( isNested )
- {
- NodeUtils.DrawNestedPropertyGroup( ref value, CustomDependencysStr, DrawMainBody, DrawButtons );
- }
- else
- {
- NodeUtils.DrawPropertyGroup( ref value, CustomDependencysStr, DrawMainBody, DrawButtons );
- }
- owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedDependencies = value;
- }
- void DrawButtons()
- {
- EditorGUILayout.Separator();
- // Add Dependency
- if( GUILayout.Button( string.Empty, UIUtils.PlusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) )
- {
- m_availableDependencies.Add( new DependenciesData() );
- EditorGUI.FocusTextInControl( null );
- }
- //Remove Dependency
- if( GUILayout.Button( string.Empty, UIUtils.MinusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) )
- {
- if( m_availableDependencies.Count > 0 )
- {
- m_availableDependencies.RemoveAt( m_availableDependencies.Count - 1 );
- EditorGUI.FocusTextInControl( null );
- }
- }
- }
- void DrawMainBody()
- {
- EditorGUILayout.Separator();
- int itemCount = m_availableDependencies.Count;
- if( itemCount == 0 )
- {
- EditorGUILayout.HelpBox( "Your list is Empty!\nUse the plus button to add one.", MessageType.Info );
- }
- int markedToDelete = -1;
- float originalLabelWidth = EditorGUIUtility.labelWidth;
- for( int i = 0; i < itemCount; i++ )
- {
- m_availableDependencies[ i ].DependencyFoldout = m_currentOwner.EditorGUILayoutFoldout( m_availableDependencies[ i ].DependencyFoldout, string.Format( "[{0}] - {1}", i, m_availableDependencies[ i ].DependencyName ) );
- if( m_availableDependencies[ i ].DependencyFoldout )
- {
- EditorGUI.indentLevel += 1;
- EditorGUIUtility.labelWidth = 70;
- //Dependency Name
- EditorGUI.BeginChangeCheck();
- m_availableDependencies[ i ].DependencyName = EditorGUILayout.TextField( DependencyNameStr, m_availableDependencies[ i ].DependencyName );
- if( EditorGUI.EndChangeCheck() )
- {
- m_availableDependencies[ i ].DependencyName = UIUtils.RemoveShaderInvalidCharacters( m_availableDependencies[ i ].DependencyName );
- }
- //Dependency Value
- EditorGUI.BeginChangeCheck();
- m_availableDependencies[ i ].DependencyValue = EditorGUILayout.TextField( DependencyValueStr, m_availableDependencies[ i ].DependencyValue );
- if( EditorGUI.EndChangeCheck() )
- {
- m_availableDependencies[ i ].DependencyValue = UIUtils.RemoveShaderInvalidCharacters( m_availableDependencies[ i ].DependencyValue );
- }
- EditorGUIUtility.labelWidth = originalLabelWidth;
- EditorGUILayout.BeginHorizontal();
- {
- GUILayout.Label( " " );
- // Add new port
- if( m_currentOwner.GUILayoutButton( string.Empty, UIUtils.PlusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) )
- {
- m_availableDependencies.Insert( i + 1, new DependenciesData() );
- EditorGUI.FocusTextInControl( null );
- }
- //Remove port
- if( m_currentOwner.GUILayoutButton( string.Empty, UIUtils.MinusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) )
- {
- markedToDelete = i;
- }
- }
- EditorGUILayout.EndHorizontal();
- EditorGUI.indentLevel -= 1;
- }
- }
- if( markedToDelete > -1 )
- {
- if( m_availableDependencies.Count > markedToDelete )
- {
- m_availableDependencies.RemoveAt( markedToDelete );
- EditorGUI.FocusTextInControl( null );
- }
- }
- EditorGUILayout.Separator();
- }
- public void ReadFromString( ref uint index, ref string[] nodeParams )
- {
- int count = Convert.ToInt32( nodeParams[ index++ ] );
- for( int i = 0; i < count; i++ )
- {
- m_availableDependencies.Add( new DependenciesData( nodeParams[ index++ ] ) );
- }
- }
- public void WriteToString( ref string nodeInfo )
- {
- int dependencyCount = m_availableDependencies.Count;
- IOUtils.AddFieldValueToString( ref nodeInfo, dependencyCount );
- for( int i = 0; i < dependencyCount; i++ )
- {
- IOUtils.AddFieldValueToString( ref nodeInfo, m_availableDependencies[ i ].ToString() );
- }
- }
- public string GenerateDependencies()
- {
- int dependencyCount = m_availableDependencies.Count;
- string result = dependencyCount == 0 ? string.Empty : "\n";
- UIUtils.ShaderIndentLevel++;
- for( int i = 0; i < dependencyCount; i++ )
- {
- if( m_availableDependencies[ i ].IsValid )
- {
- result += UIUtils.ShaderIndentTabs + m_availableDependencies[ i ].GenerateDependency();
- }
- }
- UIUtils.ShaderIndentLevel--;
- return result;
- }
- public void Destroy()
- {
- m_availableDependencies.Clear();
- m_availableDependencies = null;
- m_currentOwner = null;
- }
- public bool HasDependencies { get { return m_availableDependencies.Count > 0; } }
- }
- }
|