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