123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723 |
- // Amplify Shader Editor - Visual Shader Editing Tool
- // Copyright (c) Amplify Creations, Lda <info@amplify.pt>
- using System;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEditor;
- namespace AmplifyShaderEditor
- {
- public enum ShaderPropertyScope
- {
- Shader,
- SubShader,
- Pass
- }
- [Serializable]
- [NodeAttributes( "Template Parameter" , "Constants And Properties" , "Select and use one of the pre-existing properties given by the template" )]
- public sealed class TemplateShaderPropertyNode : TemplateNodeParent
- {
- private const string CurrentScopeStr = "Scope";
- private const string WarningStr = "Preview doesn't work with global variables";
- private const string PropertyLabelStr = "Parameter";
- private const string TypeLabelStr = "Type: ";
- private const string PropertyNameStr = "Property Name: ";
- private int IntPropertyId;
- private int FloatPropertyId;
- private int VectorPropertyId;
- private int Sampler2DPropertyId;
- private int Sampler3DPropertyId;
- private int SamplerCubePropertyId;
- [SerializeField]
- private int m_currentPropertyIdx = -1;
- [SerializeField]
- private string m_propertyName = string.Empty;
- [SerializeField]
- private int m_propertyNameId = 0;
- [SerializeField]
- private string m_typeName = string.Empty;
- [SerializeField]
- private string m_propertyNameLabel = string.Empty;
- private bool m_fetchPropertyId = false;
- private bool m_fetchScopeFromProperty = false;
- private List<TemplateShaderPropertyData> m_shaderProperties = null;
- private string[] m_propertyLabels = null;
- private UpperLeftWidgetHelper m_upperLeftWidgetHelper = new UpperLeftWidgetHelper();
- //Multi-Pass only properties
- [SerializeField]
- private ShaderPropertyScope m_currentScope = ShaderPropertyScope.Shader;
- [SerializeField]
- private bool m_advancedView = false;
- protected override void CommonInit( int uniqueId )
- {
- base.CommonInit( uniqueId );
- m_previewShaderGUID = "4feb2016be0ece148b8bf234508f6aa4";
- m_autoWrapProperties = true;
- }
- void FetchScope()
- {
- int shaderScopeCount = m_templateMPData.AvailableShaderProperties.Count;
- for( int i = 0 ; i < shaderScopeCount ; i++ )
- {
- if( m_templateMPData.AvailableShaderProperties[ i ].PropertyName.Equals( m_propertyName ) )
- {
- m_currentScope = ShaderPropertyScope.Shader;
- }
- }
- int subShaderScopeCount = m_templateMPData.SubShaders[ SubShaderIdx ].AvailableShaderGlobals.Count;
- for( int i = 0 ; i < subShaderScopeCount ; i++ )
- {
- if( m_templateMPData.SubShaders[ SubShaderIdx ].AvailableShaderGlobals[ i ].PropertyName.Equals( m_propertyName ) )
- {
- m_currentScope = ShaderPropertyScope.SubShader;
- }
- }
- int passScopeCount = m_templateMPData.SubShaders[ SubShaderIdx ].Passes[ PassIdx ].AvailableShaderGlobals.Count;
- for( int i = 0 ; i < passScopeCount ; i++ )
- {
- if( m_templateMPData.SubShaders[ SubShaderIdx ].Passes[ PassIdx ].AvailableShaderGlobals[ i ].PropertyName.Equals( m_propertyName ) )
- {
- m_currentScope = ShaderPropertyScope.Pass;
- }
- }
- }
- void FetchShaderProperties()
- {
- if( m_templateMPData == null )
- m_templateMPData = ( m_containerGraph.CurrentMasterNode as TemplateMultiPassMasterNode ).CurrentTemplate;
- if( m_templateMPData != null )
- {
- if( m_advancedView )
- {
- switch( m_currentScope )
- {
- case ShaderPropertyScope.Shader:
- m_shaderProperties = m_templateMPData.AvailableShaderProperties;
- break;
- case ShaderPropertyScope.SubShader:
- m_shaderProperties = m_templateMPData.SubShaders[ SubShaderIdx ].AvailableShaderGlobals;
- break;
- case ShaderPropertyScope.Pass:
- m_shaderProperties = m_templateMPData.SubShaders[ SubShaderIdx ].Passes[ PassIdx ].AvailableShaderGlobals;
- break;
- }
- }
- else
- {
- m_shaderProperties = m_templateMPData.AllShaderProperties;
- if( m_currentPropertyIdx < 0 && m_shaderProperties.Count > 0 )
- {
- m_currentPropertyIdx = 0;
- }
- }
- }
- }
- public override void OnEnable()
- {
- base.OnEnable();
- IntPropertyId = Shader.PropertyToID( "_IntData" );
- FloatPropertyId = Shader.PropertyToID( "_FloatData" );
- VectorPropertyId = Shader.PropertyToID( "_VectorData" );
- Sampler2DPropertyId = Shader.PropertyToID( "_Sampler2DData" );
- Sampler3DPropertyId = Shader.PropertyToID( "_Sampler3DData" );
- SamplerCubePropertyId = Shader.PropertyToID( "_SamplerCubeData" );
- }
- public override void DrawProperties()
- {
- base.DrawProperties();
- if( m_containerGraph.CurrentCanvasMode != NodeAvailability.TemplateShader )
- {
- return;
- }
- EditorGUI.BeginChangeCheck();
- m_advancedView = EditorGUILayoutToggle( "Advanced View" , m_advancedView );
- if( EditorGUI.EndChangeCheck() )
- {
- if( m_advancedView )
- {
- if( m_shaderProperties[ m_currentPropertyIdx ].PassId >= 0 )
- {
- m_currentScope = ShaderPropertyScope.Pass;
- PassIdx = m_shaderProperties[ m_currentPropertyIdx ].PassId;
- SubShaderIdx = m_shaderProperties[ m_currentPropertyIdx ].SubShaderId;
- }
- else if( m_shaderProperties[ m_currentPropertyIdx ].SubShaderId >= 0 )
- {
- m_currentScope = ShaderPropertyScope.SubShader;
- SubShaderIdx = m_shaderProperties[ m_currentPropertyIdx ].SubShaderId;
- PassIdx = 0;
- }
- else
- {
- m_currentScope = ShaderPropertyScope.Shader;
- SubShaderIdx = 0;
- PassIdx = 0;
- }
- }
- FetchShaderProperties();
- FetchPropertyId();
- }
- if( m_advancedView && m_multiPassMode )
- {
- DrawMultipassProperties();
- }
- if( m_currentPropertyIdx > -1 )
- {
- bool hasProperties = ( m_shaderProperties != null && m_shaderProperties.Count > 0 );
- if( hasProperties )
- {
- EditorGUI.BeginChangeCheck();
- m_currentPropertyIdx = EditorGUILayoutPopup( PropertyLabelStr , m_currentPropertyIdx , m_propertyLabels );
- if( EditorGUI.EndChangeCheck() )
- {
- UpdateFromId();
- }
- EditorGUILayout.LabelField( m_typeName );
- if( m_shaderProperties[ m_currentPropertyIdx ].PropertyType != PropertyType.Global )
- {
- EditorGUILayout.LabelField( m_propertyNameLabel );
- }
- }
- }
- }
- void DrawMultipassProperties()
- {
- EditorGUI.BeginChangeCheck();
- m_currentScope = (ShaderPropertyScope)EditorGUILayoutEnumPopup( CurrentScopeStr , m_currentScope );
- if( EditorGUI.EndChangeCheck() )
- {
- FetchShaderProperties();
- FetchPropertyId();
- }
- bool showSubShader = false;
- bool showPass = false;
- switch( m_currentScope )
- {
- case ShaderPropertyScope.SubShader:
- {
- showSubShader = true;
- }
- break;
- case ShaderPropertyScope.Pass:
- {
- showSubShader = true;
- showPass = true;
- }
- break;
- }
- if( showSubShader )
- {
- DrawSubShaderUI();
- }
- if( showPass )
- {
- DrawPassUI();
- }
- }
- protected override void OnSubShaderChange()
- {
- FetchShaderProperties();
- FetchPropertyId();
- }
- protected override void OnPassChange()
- {
- FetchShaderProperties();
- FetchPropertyId();
- }
- override protected void CheckWarningState()
- {
- if( m_containerGraph.CurrentCanvasMode != NodeAvailability.TemplateShader )
- {
- ShowTab( NodeMessageType.Error , ErrorMessageStr );
- }
- else
- {
- if( m_shaderProperties != null &&
- m_shaderProperties.Count > 0 &&
- m_shaderProperties.Count > m_currentPropertyIdx &&
- m_shaderProperties[ m_currentPropertyIdx ].PropertyType == PropertyType.Global &&
- m_showPreview )
- {
- ShowTab( NodeMessageType.Info , WarningStr );
- }
- else
- {
- m_showErrorMessage = false;
- }
- }
- }
- public override void SetPreviewInputs()
- {
- if( m_containerGraph.CurrentCanvasMode != NodeAvailability.TemplateShader )
- return;
- if( m_shaderProperties == null || m_currentPropertyIdx >= m_shaderProperties.Count || m_currentPropertyIdx < 0 )
- return;
- if( m_shaderProperties[ m_currentPropertyIdx ].PropertyType == PropertyType.Global )
- {
- m_additionalContent.text = string.Empty;
- PreviewMaterial.SetInt( IntPropertyId , 0 );
- return;
- }
- // @diogo: sacrificed material value display in order to have the node name in the title and property in subtitle
- //Material currMat = m_containerGraph.CurrentMaterial;
- //if( currMat != null && currMat.HasProperty( m_propertyNameId ) )
- //{
- // switch( m_shaderProperties[ m_currentPropertyIdx ].PropertyDataType )
- // {
- // case WirePortDataType.INT:
- // {
- // int value = currMat.GetInt( m_propertyNameId );
- // SetAdditonalTitleText( string.Format( Constants.SubTitleValueFormatStr , GenerateTitle( value ) ) );
- // PreviewMaterial.SetInt( IntPropertyId , value );
- // }
- // break;
- // case WirePortDataType.FLOAT:
- // {
- // float value = currMat.GetFloat( m_propertyNameId );
- // SetAdditonalTitleText( string.Format( Constants.SubTitleValueFormatStr , GenerateTitle( value ) ) );
- // PreviewMaterial.SetFloat( FloatPropertyId , value );
- // }
- // break;
- // case WirePortDataType.FLOAT4:
- // {
- // Vector4 value = currMat.GetVector( m_propertyNameId );
- // SetAdditonalTitleText( string.Format( Constants.SubTitleValueFormatStr , GenerateTitle( value.x , value.y , value.z , value.w ) ) );
- // PreviewMaterial.SetVector( VectorPropertyId , value );
- // }
- // break;
- // case WirePortDataType.COLOR:
- // {
- // Color value = currMat.GetColor( m_propertyNameId );
- // SetAdditonalTitleText( string.Format( Constants.SubTitleValueFormatStr , GenerateTitle( value.r , value.g , value.b , value.a ) ) );
- // PreviewMaterial.SetColor( VectorPropertyId , value );
- // }
- // break;
- // case WirePortDataType.SAMPLER2D:
- // {
- // Texture value = currMat.GetTexture( m_propertyNameId );
- // if( value )
- // SetAdditonalTitleText( string.Format( Constants.SubTitleValueFormatStr , value.name ) );
- // else
- // SetAdditonalTitleText( string.Empty );
- // PreviewMaterial.SetTexture( Sampler2DPropertyId , value );
- // }
- // break;
- // case WirePortDataType.SAMPLER3D:
- // {
- // Texture value = currMat.GetTexture( m_propertyNameId );
- // if( value )
- // SetAdditonalTitleText( string.Format( Constants.SubTitleValueFormatStr , value.name ) );
- // else
- // SetAdditonalTitleText( string.Empty );
- // PreviewMaterial.SetTexture( Sampler3DPropertyId , value );
- // }
- // break;
- // case WirePortDataType.SAMPLERCUBE:
- // {
- // Texture value = currMat.GetTexture( m_propertyNameId );
- // if( value )
- // SetAdditonalTitleText( string.Format( Constants.SubTitleValueFormatStr , value.name ) );
- // else
- // SetAdditonalTitleText( string.Empty );
- // PreviewMaterial.SetTexture( SamplerCubePropertyId , value );
- // }
- // break;
- // case WirePortDataType.SAMPLER2DARRAY:
- // {
- // Texture value = currMat.GetTexture( m_propertyNameId );
- // if( value )
- // SetAdditonalTitleText( string.Format( Constants.SubTitleValueFormatStr , value.name ) );
- // else
- // SetAdditonalTitleText( string.Empty );
- // PreviewMaterial.SetTexture( SamplerCubePropertyId , value );
- // }
- // break;
- // }
- //}
- //else
- //{
- // SetAdditonalTitleText( string.Empty );
- //}
- SetAdditonalTitleText( m_propertyName );
- }
- public override void Draw( DrawInfo drawInfo )
- {
- if( m_containerGraph.CurrentCanvasMode != NodeAvailability.TemplateShader )
- {
- if( !m_showErrorMessage || m_errorMessageTypeIsError == NodeMessageType.Info )
- {
- ShowTab( NodeMessageType.Error , ErrorMessageStr );
- }
- }
- else if( m_showErrorMessage )
- {
- if( m_errorMessageTypeIsError == NodeMessageType.Error )
- HideTab();
- }
- base.Draw( drawInfo );
- if( m_containerGraph.CurrentCanvasMode != NodeAvailability.TemplateShader )
- return;
- if( m_shaderProperties == null )
- {
- MasterNode masterNode = m_containerGraph.CurrentMasterNode;
- if( masterNode.CurrentMasterNodeCategory == AvailableShaderTypes.Template )
- {
- if( SetTemplate( masterNode ) )
- {
- m_fetchPropertyId = true;
- }
- }
- }
- if( m_fetchScopeFromProperty )
- {
- m_fetchScopeFromProperty = false;
- FetchScope();
- FetchShaderProperties();
- }
- if( m_fetchPropertyId )
- {
- m_fetchPropertyId = false;
- FetchPropertyId();
- }
- if( m_currentPropertyIdx > -1 )
- {
- EditorGUI.BeginChangeCheck();
- m_currentPropertyIdx = m_upperLeftWidgetHelper.DrawWidget( this , m_currentPropertyIdx , m_propertyLabels );
- if( EditorGUI.EndChangeCheck() )
- {
- UpdateFromId();
- }
- }
- }
- void FetchPropertyId()
- {
- if( m_shaderProperties != null )
- {
- m_currentPropertyIdx = 0;
- m_propertyLabels = new string[ m_shaderProperties.Count ];
- for( int i = 0 ; i < m_shaderProperties.Count ; i++ )
- {
- if( m_shaderProperties[ i ].PropertyName.Equals( m_propertyName ) )
- {
- m_currentPropertyIdx = i;
- }
- m_propertyLabels[ i ] = m_shaderProperties[ i ].PropertyInspectorName;
- }
- UpdateFromId();
- }
- else
- {
- m_currentPropertyIdx = -1;
- }
- }
- void UpdateFromId()
- {
- if( m_shaderProperties != null )
- {
- if( m_shaderProperties.Count == 0 )
- {
- for( int i = 0 ; i < 4 ; i++ )
- m_containerGraph.DeleteConnection( false , UniqueId , i , false , true );
- m_headerColor = UIUtils.GetColorFromCategory( "Default" );
- SetAdditonalTitleText( "<None>" );
- m_additionalContent.text = string.Empty;
- m_previewMaterialPassId = 1;
- PreviewMaterial.SetFloat( FloatPropertyId , 0 );
- m_showPreview = false;
- m_drawPreviewExpander = false;
- m_outputPorts[ 0 ].ChangeProperties( "None" , WirePortDataType.FLOAT , false );
- ConfigurePorts();
- return;
- }
- m_drawPreviewExpander = true;
- bool areCompatible = TemplateHelperFunctions.CheckIfCompatibles( m_outputPorts[ 0 ].DataType , m_shaderProperties[ m_currentPropertyIdx ].PropertyDataType );
- switch( m_shaderProperties[ m_currentPropertyIdx ].PropertyDataType )
- {
- case WirePortDataType.SAMPLER1D:
- case WirePortDataType.SAMPLER2D:
- case WirePortDataType.SAMPLER3D:
- case WirePortDataType.SAMPLERCUBE:
- case WirePortDataType.SAMPLER2DARRAY:
- m_outputPorts[ 0 ].ChangeProperties( "Tex" , m_shaderProperties[ m_currentPropertyIdx ].PropertyDataType , false );
- m_headerColor = UIUtils.GetColorFromCategory( "Textures" );
- break;
- case WirePortDataType.INT:
- case WirePortDataType.FLOAT:
- m_outputPorts[ 0 ].ChangeProperties( Constants.EmptyPortValue , m_shaderProperties[ m_currentPropertyIdx ].PropertyDataType , false );
- m_headerColor = UIUtils.GetColorFromCategory( "Constants And Properties" );
- break;
- case WirePortDataType.FLOAT4:
- m_outputPorts[ 0 ].ChangeProperties( "XYZW" , m_shaderProperties[ m_currentPropertyIdx ].PropertyDataType , false );
- m_headerColor = UIUtils.GetColorFromCategory( "Constants And Properties" );
- break;
- case WirePortDataType.COLOR:
- m_outputPorts[ 0 ].ChangeProperties( "RGBA" , m_shaderProperties[ m_currentPropertyIdx ].PropertyDataType , false );
- m_headerColor = UIUtils.GetColorFromCategory( "Constants And Properties" );
- break;
- default:
- case WirePortDataType.OBJECT:
- case WirePortDataType.FLOAT3x3:
- case WirePortDataType.FLOAT4x4:
- m_outputPorts[ 0 ].ChangeProperties( "Out" , m_shaderProperties[ m_currentPropertyIdx ].PropertyDataType , false );
- m_headerColor = UIUtils.GetColorFromCategory( "Constants And Properties" );
- break;
- }
- if( !areCompatible )
- {
- for( int i = 0 ; i < 4 ; i++ )
- m_containerGraph.DeleteConnection( false , UniqueId , i , false , true );
- }
- ConfigurePorts();
- m_propertyName = m_shaderProperties[ m_currentPropertyIdx ].PropertyName;
- SetAdditonalTitleText( m_propertyName );
- m_propertyNameId = Shader.PropertyToID( m_propertyName );
- m_typeName = TypeLabelStr + m_shaderProperties[ m_currentPropertyIdx ].PropertyType.ToString();
- if( m_shaderProperties[ m_currentPropertyIdx ].PropertyType != PropertyType.Global )
- {
- m_propertyNameLabel = PropertyNameStr + m_shaderProperties[ m_currentPropertyIdx ].PropertyName;
- }
- m_sizeIsDirty = true;
- Material currMat = m_containerGraph.CurrentMaterial;
- if( currMat != null )
- {
- if( m_shaderProperties[ m_currentPropertyIdx ].PropertyType == PropertyType.Global )
- {
- m_previewMaterialPassId = 0;
- if( !m_showErrorMessage && m_showPreview )
- {
- ShowTab( NodeMessageType.Info , WarningStr );
- }
- }
- else
- {
- if( m_showErrorMessage && m_errorMessageTypeIsError != NodeMessageType.Error )
- {
- HideTab();
- }
- switch( m_shaderProperties[ m_currentPropertyIdx ].PropertyDataType )
- {
- case WirePortDataType.INT: m_previewMaterialPassId = 0; break;
- case WirePortDataType.FLOAT: m_previewMaterialPassId = 1; break;
- case WirePortDataType.FLOAT4:
- case WirePortDataType.COLOR: m_previewMaterialPassId = 2; break;
- case WirePortDataType.SAMPLER2D: m_previewMaterialPassId = 3; break;
- case WirePortDataType.SAMPLER3D: m_previewMaterialPassId = 4; break;
- case WirePortDataType.SAMPLERCUBE: m_previewMaterialPassId = 5; break;
- default: PreviewMaterial.SetPass( 0 ); break;
- }
- }
- }
- CheckWarningState();
- }
- }
- string GenerateTitle( params float[] values )
- {
- //string finalResult = "( ";
- string finalResult = string.Empty;
- if( values.Length == 1 )
- {
- finalResult += values[ 0 ].ToString( Mathf.Abs( values[ 0 ] ) > 1000 ? Constants.PropertyBigFloatFormatLabel : Constants.PropertyFloatFormatLabel );
- }
- else
- {
- for( int i = 0 ; i < values.Length ; i++ )
- {
- finalResult += values[ i ].ToString( Mathf.Abs( values[ i ] ) > 1000 ? Constants.PropertyBigVectorFormatLabel : Constants.PropertyVectorFormatLabel );
- if( i < ( values.Length - 1 ) )
- finalResult += ",";
- }
- }
- //finalResult += " )";
- return finalResult;
- }
- public override string GenerateShaderForOutput( int outputId , ref MasterNodeDataCollector dataCollector , bool ignoreLocalvar )
- {
- if( dataCollector.MasterNodeCategory != AvailableShaderTypes.Template )
- {
- UIUtils.ShowMessage( UniqueId , "Template Parameter node is only intended for templates use only" , MessageSeverity.Error );
- return m_outputPorts[ outputId ].ErrorValue;
- }
- if( m_shaderProperties == null || m_shaderProperties.Count == 0 )
- {
- UIUtils.ShowMessage( UniqueId , "Attempting to fetch inexistant parameter on " + m_nodeAttribs.Name + " node" , MessageSeverity.Error );
- return m_outputPorts[ outputId ].ErrorValue;
- }
- if( m_multiPassMode )
- {
- switch( m_currentScope )
- {
- case ShaderPropertyScope.SubShader:
- {
- if( dataCollector.TemplateDataCollectorInstance.MultipassSubshaderIdx != SubShaderIdx )
- {
- UIUtils.ShowMessage( UniqueId , string.Format( "{0} is only intended for subshader {1}" , m_propertyLabels[ m_currentPropertyIdx ] , SubShaderIdx ) );
- return m_outputPorts[ outputId ].ErrorValue;
- }
- }
- break;
- case ShaderPropertyScope.Pass:
- {
- if( dataCollector.TemplateDataCollectorInstance.MultipassSubshaderIdx != SubShaderIdx ||
- dataCollector.TemplateDataCollectorInstance.MultipassPassIdx != PassIdx
- )
- {
- UIUtils.ShowMessage( UniqueId , string.Format( "{0} is only intended for subshader {1} and pass {2}" , m_propertyLabels[ m_currentPropertyIdx ] , SubShaderIdx , PassIdx ) );
- return m_outputPorts[ outputId ].ErrorValue;
- }
- }
- break;
- }
- }
- return GetOutputVectorItem( 0 , outputId , m_propertyName );
- }
- public override void ReadFromString( ref string[] nodeParams )
- {
- base.ReadFromString( ref nodeParams );
- m_propertyName = GetCurrentParam( ref nodeParams );
- m_propertyNameId = Shader.PropertyToID( m_propertyName );
- if( UIUtils.CurrentShaderVersion() > TemplatesManager.MPShaderVersion )
- {
- m_currentScope = (ShaderPropertyScope)Enum.Parse( typeof( ShaderPropertyScope ) , GetCurrentParam( ref nodeParams ) );
- }
- else
- {
- m_fetchScopeFromProperty = true;
- }
- m_fetchPropertyId = true;
- if( UIUtils.CurrentShaderVersion() > 18502 )
- {
- m_advancedView = Convert.ToBoolean( GetCurrentParam( ref nodeParams ) );
- }
- }
- public override void WriteToString( ref string nodeInfo , ref string connectionsInfo )
- {
- base.WriteToString( ref nodeInfo , ref connectionsInfo );
- IOUtils.AddFieldValueToString( ref nodeInfo , m_propertyName );
- IOUtils.AddFieldValueToString( ref nodeInfo , m_currentScope );
- IOUtils.AddFieldValueToString( ref nodeInfo , m_advancedView );
- }
- public override void OnMasterNodeReplaced( MasterNode newMasterNode )
- {
- base.OnMasterNodeReplaced( newMasterNode );
- if( newMasterNode.CurrentMasterNodeCategory == AvailableShaderTypes.Template )
- {
- SetTemplate( newMasterNode );
- if( m_fetchScopeFromProperty )
- {
- m_fetchScopeFromProperty = false;
- FetchScope();
- }
- FetchShaderProperties();
- FetchPropertyId();
- //m_containerGraph.DeleteConnection( false, UniqueId, 0, false, true );
- }
- }
- bool SetTemplate( MasterNode newMasterNode )
- {
- if( m_containerGraph.MultiPassMasterNodes.NodesList.Count > 0 )
- {
- m_multiPassMode = true;
- TemplateMultiPassMasterNode templateMasterNode = ( newMasterNode as TemplateMultiPassMasterNode );
- if( templateMasterNode != null )
- {
- m_templateMPData = templateMasterNode.CurrentTemplate;
- UpdateSubShaderAmount();
- FetchShaderProperties();
- return true;
- }
- }
- else
- {
- m_multiPassMode = false;
- TemplateMasterNode templateMasterNode = ( newMasterNode as TemplateMasterNode );
- if( templateMasterNode != null )
- {
- m_shaderProperties = templateMasterNode.CurrentTemplate.AvailableShaderProperties;
- return true;
- }
- }
- return false;
- }
- public override void RefreshExternalReferences()
- {
- base.RefreshExternalReferences();
- CheckWarningState();
- }
- public override void Destroy()
- {
- base.Destroy();
- m_propertyLabels = null;
- m_shaderProperties = null;
- m_upperLeftWidgetHelper = null;
- }
- }
- }
|