diff options
Diffstat (limited to 'Assets/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateMultiPassSwitchNode.cs')
-rw-r--r-- | Assets/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateMultiPassSwitchNode.cs | 328 |
1 files changed, 0 insertions, 328 deletions
diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateMultiPassSwitchNode.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateMultiPassSwitchNode.cs deleted file mode 100644 index e8aeadf8..00000000 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateMultiPassSwitchNode.cs +++ /dev/null @@ -1,328 +0,0 @@ -// Amplify Shader Editor - Visual Shader Editing Tool -// Copyright (c) Amplify Creations, Lda <info@amplify.pt> - -using UnityEngine; -using UnityEditor; -using System; -using System.Collections.Generic; - -namespace AmplifyShaderEditor -{ - - [Serializable] - public class InputSwitchMPHelper - { - public int SubShaderIdx; - public int PassIdx; - public InputSwitchMPHelper( int subShaderIdx, int passIdx ) - { - SubShaderIdx = subShaderIdx; - PassIdx = passIdx; - } - } - - [Serializable] - [NodeAttributes( "Template Multi-Pass Switch", "Logical Operators", "Relays, in compile time, the correct input port according to current analyzed sub-shader/pass." )] - public sealed class TemplateMultiPassSwitchNode : TemplateNodeParent - { - private const string InputLabelStr = "SubShader {0} Pass {1}"; - - [SerializeField] - private List<InputSwitchMPHelper> m_inputHelper = new List<InputSwitchMPHelper>(); - - [SerializeField] - private int m_inputCountHelper = -1; - - protected override void CommonInit( int uniqueId ) - { - m_createAllOutputs = false; - base.CommonInit( uniqueId ); - } - - public override void OnInputPortConnected( int portId, int otherNodeId, int otherPortId, bool activateNode = true ) - { - base.OnInputPortConnected( portId, otherNodeId, otherPortId, activateNode ); - UpdateConnections(); - } - - public override void OnConnectedOutputNodeChanges( int inputPortId, int otherNodeId, int otherPortId, string name, WirePortDataType type ) - { - base.OnConnectedOutputNodeChanges( inputPortId, otherNodeId, otherPortId, name, type ); - UpdateConnections(); - } - - public override void OnInputPortDisconnected( int portId ) - { - base.OnInputPortDisconnected( portId ); - UpdateConnections(); - } - - private void UpdateConnections() - { - WirePortDataType mainType = WirePortDataType.FLOAT; - - int highest = UIUtils.GetPriority( mainType ); - for( int i = 0; i < m_inputPorts.Count; i++ ) - { - if( m_inputPorts[ i ].IsConnected ) - { - WirePortDataType portType = m_inputPorts[ i ].GetOutputConnection().DataType; - if( UIUtils.GetPriority( portType ) > highest ) - { - mainType = portType; - highest = UIUtils.GetPriority( portType ); - } - } - } - - for( int i = 0; i < m_inputPorts.Count; i++ ) - { - m_inputPorts[ i ].ChangeType( mainType, false ); - } - - m_outputPorts[ 0 ].ChangeType( mainType, false ); - } - - public override void Draw( DrawInfo drawInfo ) - { - base.Draw( drawInfo ); - - if( m_templateMPData == null ) - { - FetchMultiPassTemplate(); - if( m_inputPorts.Count != m_inputCountHelper ) - { - CreateInputPorts(); - } - else - { - RefreshInputPorts(); - } - } - } - - - public void RefreshInputPorts() - { - if( m_multiPassMode ) - { - m_inputHelper.Clear(); - if( m_templateMPData != null ) - { - int index = 0; - int subShaderCount = m_templateMPData.SubShaders.Count; - for( int subShaderIdx = 0; subShaderIdx < subShaderCount; subShaderIdx++ ) - { - int passCount = m_templateMPData.SubShaders[ subShaderIdx ].Passes.Count; - for( int passIdx = 0; passIdx < passCount; passIdx++ ) - { - if( m_templateMPData.SubShaders[ subShaderIdx ].Passes[ passIdx ].HasValidFunctionBody ) - { - m_inputPorts[ index ].Name = string.Format( InputLabelStr, subShaderIdx, passIdx ); - m_inputHelper.Add( new InputSwitchMPHelper( subShaderIdx, passIdx ) ); - index += 1; - } - } - } - } - } - else - { - m_inputPorts[0].Name = "In"; - } - } - - public int RefreshInputCountHelper() - { - int inputCountHelper = 0; - if( m_multiPassMode ) - { - if( m_templateMPData != null ) - { - int subShaderCount = m_templateMPData.SubShaders.Count; - for( int subShaderIdx = 0; subShaderIdx < subShaderCount; subShaderIdx++ ) - { - int passCount = m_templateMPData.SubShaders[ subShaderIdx ].Passes.Count; - for( int passIdx = 0; passIdx < passCount; passIdx++ ) - { - if( m_templateMPData.SubShaders[ subShaderIdx ].Passes[passIdx].HasValidFunctionBody ) - inputCountHelper += 1; - } - } - } - } - else - { - inputCountHelper += 1; - } - return inputCountHelper; - } - - public void CreateInputPorts() - { - m_inputCountHelper = 0; - DeleteAllInputConnections( true ); - if( m_multiPassMode ) - { - m_inputHelper.Clear(); - if( m_templateMPData != null ) - { - int subShaderCount = m_templateMPData.SubShaders.Count; - for( int subShaderIdx = 0; subShaderIdx < subShaderCount; subShaderIdx++ ) - { - int passCount = m_templateMPData.SubShaders[ subShaderIdx ].Passes.Count; - for( int passIdx = 0; passIdx < passCount; passIdx++ ) - { - if( m_templateMPData.SubShaders[ subShaderIdx ].Passes[ passIdx ].HasValidFunctionBody ) - { - AddInputPort( WirePortDataType.FLOAT, false, string.Format( InputLabelStr, subShaderIdx, passIdx ) ); - m_inputHelper.Add( new InputSwitchMPHelper( subShaderIdx, passIdx ) ); - m_inputCountHelper += 1; - } - } - } - } - } - else - { - AddInputPort( WirePortDataType.FLOAT, false, "In" ); - m_inputCountHelper += 1; - } - } - - public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalvar ) - { - if( dataCollector.MasterNodeCategory != AvailableShaderTypes.Template ) - { - UIUtils.ShowMessage( "Template Multi-Pass Switch Data node is only intended for templates use only" ); - return m_outputPorts[ 0 ].ErrorValue; - } - - int currSubShaderIdx = dataCollector.TemplateDataCollectorInstance.MultipassSubshaderIdx; - int currPassIdx = dataCollector.TemplateDataCollectorInstance.MultipassPassIdx; - - int inputHelperCount = m_inputHelper.Count; - for( int i = 0; i< inputHelperCount; i++ ) - { - if(m_inputHelper[i].SubShaderIdx == currSubShaderIdx && m_inputHelper[ i ].PassIdx == currPassIdx ) - return m_inputPorts[ i ].GeneratePortInstructions( ref dataCollector ); - } - - UIUtils.ShowMessage( "Invalid subshader or pass on Template Multi-Pass Switch Data" ); - return m_outputPorts[ 0 ].ErrorValue; - } - - public override void OnMasterNodeReplaced( MasterNode newMasterNode ) - { - base.OnMasterNodeReplaced( newMasterNode ); - if( newMasterNode.CurrentMasterNodeCategory == AvailableShaderTypes.Template ) - { - FetchMultiPassTemplate( newMasterNode ); - m_inputCountHelper = RefreshInputCountHelper(); - if( m_inputPorts.Count != m_inputCountHelper ) - { - CreateInputPorts(); - } - else - { - RefreshInputPorts(); - } - } - else - { - DeleteAllInputConnections( true ); - } - } - - public override void ReadFromString( ref string[] nodeParams ) - { - base.ReadFromString( ref nodeParams ); - m_inputCountHelper = Convert.ToInt32( GetCurrentParam( ref nodeParams ) ); - // Need to add ports here so read internal data is correct - for( int i = 0; i < m_inputCountHelper; i++ ) - { - AddInputPort( WirePortDataType.FLOAT, false, Constants.EmptyPortValue ); - } - } - - public override void WriteToString( ref string nodeInfo, ref string connectionsInfo ) - { - base.WriteToString( ref nodeInfo, ref connectionsInfo ); - IOUtils.AddFieldValueToString( ref nodeInfo, m_inputCountHelper ); - } - - public override void Destroy() - { - base.Destroy(); - m_inputHelper.Clear(); - m_inputHelper = null; - } - - public override void RefreshExternalReferences() - { - base.RefreshExternalReferences(); - FetchMultiPassTemplate(); - - bool create = false; - if( m_inputCountHelper == -1 ) - { - create = true; - } - else - { - int newInputCount = RefreshInputCountHelper(); - if( newInputCount != m_inputCountHelper ) - { - create = true; - } - } - - - if( m_multiPassMode ) - { - if( m_templateMPData != null ) - { - if( create ) - { - CreateInputPorts(); - } - else - { - m_inputHelper.Clear(); - int index = 0; - int subShaderCount = m_templateMPData.SubShaders.Count; - for( int subShaderIdx = 0; subShaderIdx < subShaderCount; subShaderIdx++ ) - { - int passCount = m_templateMPData.SubShaders[ subShaderIdx ].Passes.Count; - for( int passIdx = 0; passIdx < passCount; passIdx++ ) - { - if( m_templateMPData.SubShaders[ subShaderIdx ].Passes[ passIdx ].HasValidFunctionBody ) - { - m_inputPorts[ index ].Name = string.Format( InputLabelStr, subShaderIdx, passIdx ); - m_inputHelper.Add( new InputSwitchMPHelper( subShaderIdx, passIdx )); - index += 1; - } - } - } - - if( index != m_inputCountHelper ) - { - Debug.LogWarning( "Something wrong occured in reading MultiPass Switch node" ); - } - } - } - } - else - { - if( create ) - { - AddInputPort( WirePortDataType.FLOAT, false, "In" ); - } - else - { - m_inputPorts[ 0 ].Name = "In"; - } - } - } - } -} |