diff options
Diffstat (limited to 'Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateOptionsPort.cs')
-rw-r--r-- | Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateOptionsPort.cs | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateOptionsPort.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateOptionsPort.cs new file mode 100644 index 00000000..04c11872 --- /dev/null +++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateOptionsPort.cs @@ -0,0 +1,174 @@ +// Amplify Shader Editor - Visual Shader Editing Tool +// Copyright (c) Amplify Creations, Lda <info@amplify.pt> + +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace AmplifyShaderEditor +{ + // PORT CONTROLLERS + [Serializable] + public class TemplateOptionPortItem + { + [SerializeField] + private int m_portId = -1; + + [SerializeField] + private TemplateOptionsItem m_options; + + public TemplateOptionPortItem( TemplateMultiPassMasterNode owner, TemplateOptionsItem options ) + { + m_options = options; + InputPort port = owner.InputPorts.Find( x => x.Name.Equals( options.Name ) ); + if( port != null ) + { + m_portId = port.PortId; + } + } + + public void FillDataCollector( TemplateMultiPassMasterNode owner, ref MasterNodeDataCollector dataCollector ) + { + InputPort port = null; + if( m_portId > -1 ) + { + port = owner.GetInputPortByUniqueId( m_portId ); + } + else + { + port = owner.InputPorts.Find( x => x.Name.Equals( m_options.Name ) ); + } + + if( port != null ) + { + int optionId = port.HasOwnOrLinkConnection ? 0 : 1; + for( int i = 0; i < m_options.ActionsPerOption[ optionId ].Length; i++ ) + { + switch( m_options.ActionsPerOption[ optionId ][ i ].ActionType ) + { + case AseOptionsActionType.SetDefine: + { + List<TemplateMultiPassMasterNode> nodes = owner.ContainerGraph.GetMultiPassMasterNodes( owner.LODIndex ); + int count = nodes.Count; + for( int nodeIdx = 0; nodeIdx < count; nodeIdx++ ) + { + nodes[ nodeIdx ].OptionsDefineContainer.AddDefine( "#define "+m_options.ActionsPerOption[ optionId ][ i ].ActionData, false ); + } + //dataCollector.AddToDefines( -1, m_options.ActionsPerOption[ optionId ][ i ].ActionData ); + } + break; + case AseOptionsActionType.SetUndefine: + { + List<TemplateMultiPassMasterNode> nodes = owner.ContainerGraph.GetMultiPassMasterNodes( owner.LODIndex ); + int count = nodes.Count; + for( int nodeIdx = 0; nodeIdx < count; nodeIdx++ ) + { + nodes[ nodeIdx ].OptionsDefineContainer.AddDefine( "#undef " + m_options.ActionsPerOption[ optionId ][ i ].ActionData, false ); + } + //dataCollector.AddToDefines( -1, m_options.ActionsPerOption[ optionId ][ i ].ActionData, false ); + } + break; + case AseOptionsActionType.SetShaderProperty: + { + TemplateShaderPropertyData data = owner.CurrentTemplate.GetShaderPropertyData( m_options.ActionsPerOption[ optionId ][ i ].ActionData ); + if( data != null ) + { + string newPropertyValue = data.CreatePropertyForValue( m_options.ActionsPerOption[ optionId ][ i ].ActionBuffer ); + owner.CurrentTemplate.IdManager.SetReplacementText( data.FullValue, newPropertyValue ); + } + } + break; + } + } + } + } + + public void SubShaderFillDataCollector( TemplateMultiPassMasterNode owner, ref MasterNodeDataCollector dataCollector ) + { + + //TemplateMultiPassMasterNode targetNode = string.IsNullOrEmpty(m_options.Id) ? owner:owner.ContainerGraph.GetMasterNodeOfPass( m_options.Id , owner.LODIndex ); + TemplateMultiPassMasterNode targetNode = string.IsNullOrEmpty( m_options.Id ) ? + owner.ContainerGraph.GetMainMasterNodeOfLOD( owner.LODIndex ) : + owner.ContainerGraph.GetMasterNodeOfPass( m_options.Id , owner.LODIndex ); + + InputPort port = null; + if( m_portId > -1 ) + { + port = targetNode.GetInputPortByUniqueId( m_portId ); + } + else + { + port = targetNode.InputPorts.Find( x => x.Name.Equals( m_options.Name ) ); + } + + if( port != null ) + { + int optionId = port.HasOwnOrLinkConnection ? 0 : 1; + for( int i = 0; i < m_options.ActionsPerOption[ optionId ].Length; i++ ) + { + if( string.IsNullOrEmpty( m_options.ActionsPerOption[ optionId ][ i ].PassName ) || + m_options.ActionsPerOption[ optionId ][ i ].PassName.Equals( owner.PassName ) ) + { + switch( m_options.ActionsPerOption[ optionId ][ i ].ActionType ) + { + case AseOptionsActionType.SetDefine: + { + owner.OptionsDefineContainer.AddDefine( "#define " + m_options.ActionsPerOption[ optionId ][ i ].ActionData, true ); + } + break; + case AseOptionsActionType.SetUndefine: + { + owner.OptionsDefineContainer.AddDefine( "#undef " + m_options.ActionsPerOption[ optionId ][ i ].ActionData, true ); + } + break; + case AseOptionsActionType.SetShaderProperty: + { + TemplateShaderPropertyData data = owner.CurrentTemplate.GetShaderPropertyData( m_options.ActionsPerOption[ optionId ][ i ].ActionData ); + if( data != null ) + { + string newPropertyValue = data.CreatePropertyForValue( m_options.ActionsPerOption[ optionId ][ i ].ActionBuffer ); + owner.CurrentTemplate.IdManager.SetReplacementText( data.FullValue, newPropertyValue ); + } + } + break; + } + } + } + } + } + + public void CheckImediateActionsForPort( TemplateMultiPassMasterNode owner, int portId ) + { + if( portId != m_portId ) + return; + + InputPort port = null; + if( m_portId > -1 ) + { + port = owner.GetInputPortByUniqueId( m_portId ); + } + else + { + port = owner.InputPorts.Find( x => x.Name.Equals( m_options.Name ) ); + } + + if( port != null ) + { + int optionId = port.HasOwnOrLinkConnection ? 0 : 1; + for( int i = 0; i < m_options.ActionsPerOption[ optionId ].Length; i++ ) + { + switch( m_options.ActionsPerOption[ optionId ][ i ].ActionType ) + { + case AseOptionsActionType.SetPortName: + { + port.Name = m_options.ActionsPerOption[ optionId ][ i ].ActionData; + owner.SizeIsDirty = true; + } + break; + } + } + } + } + public TemplateOptionsItem Options { get { return m_options; } } + } +} |