summaryrefslogtreecommitdiff
path: root/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/ReordenatorNode.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/ReordenatorNode.cs')
-rw-r--r--Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/ReordenatorNode.cs170
1 files changed, 170 insertions, 0 deletions
diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/ReordenatorNode.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/ReordenatorNode.cs
new file mode 100644
index 00000000..8bd85dc4
--- /dev/null
+++ b/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/ReordenatorNode.cs
@@ -0,0 +1,170 @@
+using UnityEngine;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+
+namespace AmplifyShaderEditor
+{
+ [Serializable]
+ public class ReordenatorNode : PropertyNode
+ {
+ [SerializeField]
+ private List<PropertyNode> m_propertyList;
+
+ [SerializeField]
+ private string m_headerTitle = string.Empty;
+
+ [SerializeField]
+ private bool m_isInside;
+
+ public ReordenatorNode() : base()
+ {
+
+ }
+
+ public void Init( string entryName, string entryInspectorName, List<PropertyNode> list, bool register = true )
+ {
+ m_propertyName = entryName;
+ m_propertyInspectorName = entryInspectorName;
+
+ m_propertyList = list;
+
+ if( register )
+ UIUtils.RegisterPropertyNode( this );
+ }
+
+ public override void Destroy()
+ {
+ base.Destroy();
+
+ m_propertyList.Clear();
+ m_propertyList = null;
+
+ UIUtils.UnregisterPropertyNode( this );
+ }
+
+ //public List<ParentNode> PropertyList
+ //{
+ // get { return m_propertyList; }
+ //}
+
+ public int PropertyListCount
+ {
+ get { if ( m_propertyList != null ) return m_propertyList.Count; else return -1; }
+ }
+
+ public string HeaderTitle { get { return m_headerTitle; } set { m_headerTitle = value; } }
+
+ public bool HasTitle { get { return !string.IsNullOrEmpty( m_headerTitle ); } }
+
+ public bool IsInside { get { return m_isInside; } set { m_isInside = value; } }
+
+ public int RecursiveSetOrderOffset( int offset, bool lockit, int order = -1 )
+ {
+ //Debug.Log( Locked + " " + PropertyName );
+
+ if ( Locked )
+ return offset;
+
+ if( order > -1 )
+ OrderIndex = order;
+
+ int currentOffset = offset;
+
+ if( m_propertyList != null )
+ m_propertyList.Sort( ( x, y ) => { return ( x as PropertyNode ).OrderIndex.CompareTo( ( y as PropertyNode ).OrderIndex ); } );
+
+ OrderIndexOffset = currentOffset - RawOrderIndex;
+ currentOffset++;
+
+ if ( m_propertyList != null )
+ for ( int i = 0; i < m_propertyList.Count; i++ )
+ {
+ ReordenatorNode rnode = m_propertyList[ i ] as ReordenatorNode;
+ if ( rnode != null )
+ {
+ currentOffset = rnode.RecursiveSetOrderOffset( currentOffset, false );
+ }
+ else
+ {
+ PropertyNode pnode = m_propertyList[ i ] as PropertyNode;
+ {
+ pnode.OrderIndexOffset = currentOffset - pnode.RawOrderIndex;// + ( HasTitle ? 1 : 0 );
+ }
+ currentOffset++;
+ }
+ }
+
+ if ( lockit )
+ Locked = true;
+
+ return currentOffset;
+ }
+
+ public int RecursiveCount()
+ {
+ int amount = 0;
+ if ( HasTitle )
+ amount += 1;
+ for ( int i = 0; i < m_propertyList.Count; i++ )
+ {
+ if ( ( m_propertyList[ i ] is ReordenatorNode ) )
+ amount += ( m_propertyList[ i ] as ReordenatorNode ).RecursiveCount();
+ else
+ amount +=1;
+ }
+ return amount;
+ }
+
+ public void RecursiveLog()
+ {
+ Debug.LogWarning( OrderIndex+" HEADER "+ PropertyName );
+ for( int i = 0; i < m_propertyList.Count; i++ )
+ {
+ if( ( m_propertyList[ i ] is ReordenatorNode ) )
+ ( m_propertyList[ i ] as ReordenatorNode ).RecursiveLog();
+ else
+ Debug.Log( ( m_propertyList[ i ] as PropertyNode ).OrderIndex+" "+( m_propertyList[ i ] as PropertyNode).PropertyName );
+ }
+ }
+
+ public bool Locked = false;
+
+ public void RecursiveClear()
+ {
+ Locked = false;
+ if( m_propertyList != null)
+ for ( int i = 0; i < m_propertyList.Count; i++ )
+ {
+ ReordenatorNode renode = ( m_propertyList[ i ] as ReordenatorNode );
+ if ( renode != null )
+ {
+ renode.RecursiveClear();
+ }
+ }
+ }
+
+ public bool RecursiveConnectedProperties()
+ {
+ bool connected = false;
+ if ( m_propertyList != null )
+ {
+ for ( int i = 0; i < m_propertyList.Count; i++ )
+ {
+ ReordenatorNode renode = ( m_propertyList[ i ] as ReordenatorNode );
+ if ( renode != null )
+ {
+ bool temp = renode.RecursiveConnectedProperties();
+ if( temp )
+ connected = true;
+ } else
+ {
+ if ( ( m_propertyList[ i ] as PropertyNode ).IsConnected )
+ connected = true;
+ }
+ }
+ }
+ return connected;
+ }
+ }
+}