123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- using System;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEditor;
- namespace AmplifyShaderEditor
- {
- [Serializable]
- public class AdditionalIncludesHelper
- {
- private const string AdditionalIncludesStr = " Additional Includes";
- private const float ShaderKeywordButtonLayoutWidth = 15;
- private ParentNode m_currentOwner;
- [SerializeField]
- private List<string> m_additionalIncludes = new List<string>();
- public List<string> IncludeList { get { return m_additionalIncludes; } set { m_additionalIncludes = value; } }
- [SerializeField]
- private List<string> m_outsideIncludes = new List<string>();
- public List<string> OutsideList { get { return m_outsideIncludes; } set { m_outsideIncludes = value; } }
- public void Draw( ParentNode owner )
- {
- m_currentOwner = owner;
- bool value = owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedAdditionalIncludes;
- NodeUtils.DrawPropertyGroup( ref value, AdditionalIncludesStr, DrawMainBody, DrawButtons );
- owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedAdditionalIncludes = value;
- }
- void DrawButtons()
- {
- EditorGUILayout.Separator();
- // Add keyword
- if( GUILayout.Button( string.Empty, UIUtils.PlusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) )
- {
- m_additionalIncludes.Add( string.Empty );
- EditorGUI.FocusTextInControl( null );
- }
- //Remove keyword
- if( GUILayout.Button( string.Empty, UIUtils.MinusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) )
- {
- if( m_additionalIncludes.Count > 0 )
- {
- m_additionalIncludes.RemoveAt( m_additionalIncludes.Count - 1 );
- EditorGUI.FocusTextInControl( null );
- }
- }
- }
- void DrawMainBody()
- {
- EditorGUILayout.Separator();
- //if( OutsideList != null && OutsideList.Count > 0 )
- //{
- // m_drawElements.Clear();
- // EditorGUI.BeginDisabledGroup( true );
- // int outsideCount = OutsideList.Count;
- // for( int i = 0; i < outsideCount; i++ )
- // {
- // if( !m_drawElements.Contains( OutsideList[ i ] ) )
- // {
- // m_drawElements.Add( OutsideList[ i ] );
- // EditorGUILayout.TextField( OutsideList[ i ] );
- // }
- // }
- // EditorGUI.EndDisabledGroup();
- // EditorGUILayout.Separator();
- //}
- int itemCount = m_additionalIncludes.Count;
- int markedToDelete = -1;
- for( int i = 0; i < itemCount; i++ )
- {
- EditorGUILayout.BeginHorizontal();
- {
- EditorGUI.BeginChangeCheck();
- m_additionalIncludes[ i ] = EditorGUILayout.TextField( m_additionalIncludes[ i ] );
- if( EditorGUI.EndChangeCheck() )
- {
- m_additionalIncludes[ i ] = UIUtils.RemoveShaderInvalidCharacters( m_additionalIncludes[ i ] );
- }
- // Add new port
- if( m_currentOwner.GUILayoutButton( string.Empty, UIUtils.PlusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) )
- {
- m_additionalIncludes.Insert( i + 1, string.Empty );
- EditorGUI.FocusTextInControl( null );
- }
- //Remove port
- if( m_currentOwner.GUILayoutButton( string.Empty, UIUtils.MinusStyle, GUILayout.Width( ShaderKeywordButtonLayoutWidth ) ) )
- {
- markedToDelete = i;
- }
- }
- EditorGUILayout.EndHorizontal();
- }
- if( markedToDelete > -1 )
- {
- if( m_additionalIncludes.Count > markedToDelete )
- {
- m_additionalIncludes.RemoveAt( markedToDelete );
- EditorGUI.FocusTextInControl( null );
- }
- }
- EditorGUILayout.Separator();
- EditorGUILayout.HelpBox( "Please add your includes without the #include \"\" keywords", MessageType.Info );
- }
- public void ReadFromString( ref uint index, ref string[] nodeParams )
- {
- int count = Convert.ToInt32( nodeParams[ index++ ] );
- for( int i = 0; i < count; i++ )
- {
- m_additionalIncludes.Add( nodeParams[ index++ ] );
- }
- }
- public void WriteToString( ref string nodeInfo )
- {
- IOUtils.AddFieldValueToString( ref nodeInfo, m_additionalIncludes.Count );
- for( int i = 0; i < m_additionalIncludes.Count; i++ )
- {
- IOUtils.AddFieldValueToString( ref nodeInfo, m_additionalIncludes[ i ] );
- }
- }
- public void AddToDataCollector( ref MasterNodeDataCollector dataCollector )
- {
- for( int i = 0; i < m_additionalIncludes.Count; i++ )
- {
- if( !string.IsNullOrEmpty( m_additionalIncludes[ i ] ) )
- dataCollector.AddToIncludes( -1, m_additionalIncludes[ i ] );
- }
- for( int i = 0; i < m_outsideIncludes.Count; i++ )
- {
- if( !string.IsNullOrEmpty( m_outsideIncludes[ i ] ) )
- dataCollector.AddToIncludes( -1, m_outsideIncludes[ i ] );
- }
- }
- public void Destroy()
- {
- m_additionalIncludes.Clear();
- m_additionalIncludes = null;
- m_currentOwner = null;
- }
- }
- }
|