diff options
author | chai <chaifix@163.com> | 2020-10-23 13:08:43 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2020-10-23 13:08:43 +0800 |
commit | b82da95b5181ac8bbae38efb13e950d5e88a4caa (patch) | |
tree | 48a6f3269276484bbc7cfc95f0651f40a2176aa1 /Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Misc/AppendNode.cs | |
parent | 917e9e0b320775634dc2e710f7deac74fd0822f0 (diff) |
*移动amplify shader editor到third party目录
Diffstat (limited to 'Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Misc/AppendNode.cs')
-rw-r--r-- | Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Misc/AppendNode.cs | 254 |
1 files changed, 254 insertions, 0 deletions
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Misc/AppendNode.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Misc/AppendNode.cs new file mode 100644 index 00000000..6318614b --- /dev/null +++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Misc/AppendNode.cs @@ -0,0 +1,254 @@ +// Amplify Shader Editor - Visual Shader Editing Tool +// Copyright (c) Amplify Creations, Lda <info@amplify.pt> + +using UnityEngine; +using UnityEditor; +using System; + +namespace AmplifyShaderEditor +{ + [Serializable] + [NodeAttributes( "[Old]Append", "Vector Operators", "Append channels to create a new component",null,KeyCode.V,true,true,"Append",typeof(DynamicAppendNode))] + public sealed class AppendNode : ParentNode + { + private const string OutputTypeStr = "Output type"; + + [SerializeField] + private WirePortDataType m_selectedOutputType = WirePortDataType.FLOAT4; + + [SerializeField] + private int m_selectedOutputTypeInt = 2; + + [SerializeField] + private float[] m_defaultValues = { 0, 0, 0, 0 }; + private string[] m_defaultValuesStr = { "[0]", "[1]", "[2]", "[3]" }; + + private readonly string[] m_outputValueTypes ={ "Vector2", + "Vector3", + "Vector4", + "Color"}; + + protected override void CommonInit( int uniqueId ) + { + base.CommonInit( uniqueId ); + AddInputPort( WirePortDataType.FLOAT, false, "[0]" ); + AddInputPort( WirePortDataType.FLOAT, false, "[1]" ); + AddInputPort( WirePortDataType.FLOAT, false, "[2]" ); + AddInputPort( WirePortDataType.FLOAT, false, "[3]" ); + AddOutputPort( m_selectedOutputType, Constants.EmptyPortValue ); + m_textLabelWidth = 90; + m_autoWrapProperties = true; + m_previewShaderGUID = "d80ac81aabf643848a4eaa76f2f88d65"; + } + + public override void Draw( DrawInfo drawInfo ) + { + base.Draw( drawInfo ); + + if ( m_dropdownEditing ) + { + EditorGUI.BeginChangeCheck(); + m_selectedOutputTypeInt = EditorGUIPopup( m_dropdownRect, m_selectedOutputTypeInt, m_outputValueTypes, UIUtils.PropertyPopUp ); + if ( EditorGUI.EndChangeCheck() ) + { + SetupPorts(); + DropdownEditing = false; + } + } + } + + void SetupPorts() + { + switch ( m_selectedOutputTypeInt ) + { + case 0: m_selectedOutputType = WirePortDataType.FLOAT2; break; + case 1: m_selectedOutputType = WirePortDataType.FLOAT3; break; + case 2: m_selectedOutputType = WirePortDataType.FLOAT4; break; + case 3: m_selectedOutputType = WirePortDataType.COLOR; break; + } + + UpdatePorts(); + } + + public override void DrawProperties() + { + base.DrawProperties(); + EditorGUILayout.BeginVertical(); + + EditorGUI.BeginChangeCheck(); + m_selectedOutputTypeInt = EditorGUILayoutPopup( OutputTypeStr, m_selectedOutputTypeInt, m_outputValueTypes ); + if ( EditorGUI.EndChangeCheck() ) + { + SetupPorts(); + } + + int count = 0; + switch ( m_selectedOutputType ) + { + case WirePortDataType.FLOAT4: + case WirePortDataType.COLOR: + { + count = 4; + } + break; + case WirePortDataType.FLOAT3: + { + count = 3; + } + break; + case WirePortDataType.FLOAT2: + { + count = 2; + } + break; + case WirePortDataType.OBJECT: + case WirePortDataType.FLOAT: + case WirePortDataType.INT: + case WirePortDataType.FLOAT3x3: + case WirePortDataType.FLOAT4x4: + { } + break; + } + + for ( int i = 0; i < count; i++ ) + { + if ( !m_inputPorts[ i ].IsConnected ) + m_defaultValues[ i ] = EditorGUILayoutFloatField( m_defaultValuesStr[ i ], m_defaultValues[ i ] ); + } + + EditorGUILayout.EndVertical(); + } + void UpdatePorts() + { + m_sizeIsDirty = true; + ChangeOutputType( m_selectedOutputType, false ); + switch ( m_selectedOutputType ) + { + case WirePortDataType.FLOAT4: + case WirePortDataType.OBJECT: + case WirePortDataType.COLOR: + { + m_inputPorts[ 0 ].Visible = true; + m_inputPorts[ 1 ].Visible = true; + m_inputPorts[ 2 ].Visible = true; + m_inputPorts[ 3 ].Visible = true; + } + break; + case WirePortDataType.FLOAT3: + { + m_inputPorts[ 0 ].Visible = true; + m_inputPorts[ 1 ].Visible = true; + m_inputPorts[ 2 ].Visible = true; + m_inputPorts[ 3 ].Visible = false; + if ( m_inputPorts[ 3 ].IsConnected ) + UIUtils.DeleteConnection( true, UniqueId, 3, false, true ); + } + break; + case WirePortDataType.FLOAT2: + { + m_inputPorts[ 0 ].Visible = true; + m_inputPorts[ 1 ].Visible = true; + m_inputPorts[ 2 ].Visible = false; + if ( m_inputPorts[ 2 ].IsConnected ) + UIUtils.DeleteConnection( true, UniqueId, 2, false, true ); + + m_inputPorts[ 3 ].Visible = false; + if ( m_inputPorts[ 3 ].IsConnected ) + UIUtils.DeleteConnection( true, UniqueId, 3, false, true ); + } + break; + case WirePortDataType.FLOAT: + case WirePortDataType.INT: + case WirePortDataType.FLOAT3x3: + case WirePortDataType.FLOAT4x4: + { } + break; + } + } + public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalVar ) + { + if ( m_outputPorts[ 0 ].IsLocalValue( dataCollector.PortCategory ) ) + return m_outputPorts[ 0 ].LocalValue( dataCollector.PortCategory ); + + string value = string.Empty; + switch ( m_selectedOutputType ) + { + case WirePortDataType.FLOAT4: + case WirePortDataType.OBJECT: + case WirePortDataType.COLOR: + { + value = "float4( "; + for ( int i = 0; i < 4; i++ ) + { + value += m_inputPorts[ i ].IsConnected ? InputPorts[ i ].GenerateShaderForOutput( ref dataCollector, WirePortDataType.FLOAT, ignoreLocalVar, true ) : m_defaultValues[ i ].ToString(); + if ( i != 3 ) + value += " , "; + } + value += " )"; + } + break; + case WirePortDataType.FLOAT3: + { + value = "float3( "; + for ( int i = 0; i < 3; i++ ) + { + value += m_inputPorts[ i ].IsConnected ? InputPorts[ i ].GenerateShaderForOutput( ref dataCollector, WirePortDataType.FLOAT, ignoreLocalVar, true ) : m_defaultValues[ i ].ToString(); + if ( i != 2 ) + value += " , "; + } + value += " )"; + } + break; + case WirePortDataType.FLOAT2: + { + value = "float2( "; + for ( int i = 0; i < 2; i++ ) + { + value += m_inputPorts[ i ].IsConnected ? InputPorts[ i ].GenerateShaderForOutput( ref dataCollector, WirePortDataType.FLOAT, ignoreLocalVar, true ) : m_defaultValues[ i ].ToString(); + if ( i != 1 ) + value += " , "; + } + value += " )"; + } + break; + case WirePortDataType.FLOAT: + case WirePortDataType.INT: + case WirePortDataType.FLOAT3x3: + case WirePortDataType.FLOAT4x4: + { } + break; + } + + RegisterLocalVariable( 0, value, ref dataCollector, "appendResult" + OutputId ); + return m_outputPorts[ 0 ].LocalValue( dataCollector.PortCategory ); + } + + public override void ReadFromString( ref string[] nodeParams ) + { + base.ReadFromString( ref nodeParams ); + m_selectedOutputType = ( WirePortDataType ) Enum.Parse( typeof( WirePortDataType ), GetCurrentParam( ref nodeParams ) ); + switch ( m_selectedOutputType ) + { + case WirePortDataType.FLOAT2: m_selectedOutputTypeInt = 0; break; + case WirePortDataType.FLOAT3: m_selectedOutputTypeInt = 1; break; + case WirePortDataType.FLOAT4: m_selectedOutputTypeInt = 2; break; + case WirePortDataType.COLOR: m_selectedOutputTypeInt = 3; break; + } + for ( int i = 0; i < m_defaultValues.Length; i++ ) + { + m_defaultValues[ i ] = Convert.ToSingle( GetCurrentParam( ref nodeParams ) ); + } + UpdatePorts(); + } + + public override void WriteToString( ref string nodeInfo, ref string connectionsInfo ) + { + base.WriteToString( ref nodeInfo, ref connectionsInfo ); + IOUtils.AddFieldValueToString( ref nodeInfo, m_selectedOutputType ); + for ( int i = 0; i < m_defaultValues.Length; i++ ) + { + IOUtils.AddFieldValueToString( ref nodeInfo, m_defaultValues[ i ] ); + } + } + } +} |