| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397 | // 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{	[Serializable]	public sealed class TemplateDepthModule : TemplateModuleParent	{		private const string ZWriteFormatter = "ZWrite {0}\n";		private const string ZTestFormatter = "ZTest {0}\n";		[SerializeField]		private bool m_validZTest = false;		[SerializeField]		private InlineProperty m_zTestMode = new InlineProperty( 0 );		[SerializeField]		private bool m_validZWrite = false;		[SerializeField]		private InlineProperty m_zWriteMode = new InlineProperty( 0 );		[SerializeField]		private InlineProperty m_offsetFactor = new InlineProperty( 0 );		[SerializeField]		private InlineProperty m_offsetUnits = new InlineProperty( 0 );		[SerializeField]		private bool m_offsetEnabled = false;		[SerializeField]		private bool m_validOffset = false;		public TemplateDepthModule() : base( "Depth" ) { }		public void CopyFrom( TemplateDepthModule other, bool allData )		{			if( allData )			{				m_independentModule = other.IndependentModule;				m_validZTest = other.ValidZTest;				m_validZWrite = other.ValidZWrite;				m_validOffset = other.ValidOffset;			}			m_zTestMode.CopyFrom( other.ZTestMode );			m_zWriteMode.CopyFrom( other.ZWriteMode );			m_offsetFactor.CopyFrom( other.OffsetFactor );			m_offsetUnits.CopyFrom( other.OffsetUnits );			m_offsetEnabled = other.OffsetEnabled;		}		public void ConfigureFromTemplateData( TemplateDepthData depthData )		{			m_independentModule = depthData.IndependentModule;			if( depthData.ValidZTest && m_validZTest != depthData.ValidZTest )			{				if( string.IsNullOrEmpty( depthData.ZTestInlineValue ) )				{					m_zTestMode.IntValue = ZBufferOpHelper.ZTestModeDict[ depthData.ZTestModeValue ];					m_zTestMode.ResetProperty();				}				else				{					m_zTestMode.SetInlineByName( depthData.ZTestInlineValue );				}			}			if( depthData.ValidZWrite && m_validZWrite != depthData.ValidZWrite )			{				if( string.IsNullOrEmpty( depthData.ZWriteInlineValue ) )				{					m_zWriteMode.IntValue = ZBufferOpHelper.ZWriteModeDict[ depthData.ZWriteModeValue ];					m_zWriteMode.ResetProperty();				}				else				{					m_zWriteMode.SetInlineByName( depthData.ZWriteInlineValue );				}			}			if( depthData.ValidOffset && m_validOffset != depthData.ValidOffset )			{				if( string.IsNullOrEmpty( depthData.OffsetFactorInlineValue ) )				{					m_offsetFactor.FloatValue = depthData.OffsetFactor;					m_offsetFactor.ResetProperty();				}				else				{					m_offsetFactor.SetInlineByName( depthData.OffsetFactorInlineValue );				}				if( string.IsNullOrEmpty( depthData.OffsetUnitsInlineValue ) )				{					m_offsetUnits.FloatValue = depthData.OffsetUnits;					m_offsetUnits.ResetProperty();				}				else				{					m_offsetUnits.SetInlineByName( depthData.OffsetUnitsInlineValue );				}				m_offsetEnabled = depthData.ValidOffset;			}			m_validZTest = depthData.ValidZTest;			m_validZWrite = depthData.ValidZWrite;			m_validOffset = depthData.ValidOffset;			m_validData = m_validZTest || m_validZWrite || m_validOffset;		}		public override void ShowUnreadableDataMessage( ParentNode owner )		{			bool foldoutValue = owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedDepth;			NodeUtils.DrawPropertyGroup( ref foldoutValue, ZBufferOpHelper.DepthParametersStr, base.ShowUnreadableDataMessage );			owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedDepth = foldoutValue;		}		public override void Draw( UndoParentNode owner, bool style = true )		{			bool foldout = owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedDepth;			if( style )			{				NodeUtils.DrawPropertyGroup( ref foldout, ZBufferOpHelper.DepthParametersStr, () =>				{					EditorGUI.indentLevel++;					DrawBlock( owner );					EditorGUI.indentLevel--;				} );			}			else			{				NodeUtils.DrawNestedPropertyGroup( ref foldout, ZBufferOpHelper.DepthParametersStr, () =>				{					DrawBlock( owner );				} );			}			owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedDepth = foldout;		}		void DrawBlock( UndoParentNode owner )		{			EditorGUI.BeginChangeCheck();			var cache = EditorGUIUtility.labelWidth;			EditorGUIUtility.labelWidth = EditorGUIUtility.labelWidth - 20;			Color cachedColor = GUI.color;			GUI.color = new Color( cachedColor.r, cachedColor.g, cachedColor.b, ( EditorGUIUtility.isProSkin ? 0.5f : 0.25f ) );			//EditorGUILayout.BeginVertical( UIUtils.MenuItemBackgroundStyle );			GUI.color = cachedColor;			EditorGUILayout.Separator();			if( m_validZWrite )				m_zWriteMode.EnumTypePopup( ref owner, ZBufferOpHelper.ZWriteModeStr, ZBufferOpHelper.ZWriteModeValues );			if( m_validZTest )				m_zTestMode.EnumTypePopup( ref owner, ZBufferOpHelper.ZTestModeStr, ZBufferOpHelper.ZTestModeLabels );			if( m_validOffset )			{				m_offsetEnabled = owner.EditorGUILayoutToggle( ZBufferOpHelper.OffsetStr, m_offsetEnabled );				if( m_offsetEnabled )				{					EditorGUI.indentLevel++;					m_offsetFactor.FloatField( ref owner, ZBufferOpHelper.OffsetFactorStr );					m_offsetUnits.FloatField( ref owner, ZBufferOpHelper.OffsetUnitsStr );					EditorGUI.indentLevel--;				}			}			EditorGUILayout.Separator();			EditorGUIUtility.labelWidth = cache;			//EditorGUILayout.EndVertical();			if( EditorGUI.EndChangeCheck() )			{				m_isDirty = true;				CustomEdited = true;			}		}		public void ReadZWriteFromString( ref uint index, ref string[] nodeParams )		{			bool validDataOnMeta = m_validZWrite;			if( UIUtils.CurrentShaderVersion() > TemplatesManager.MPShaderVersion )			{				validDataOnMeta = Convert.ToBoolean( nodeParams[ index++ ] );			}			if( validDataOnMeta )			{				if( UIUtils.CurrentShaderVersion() < 15304 )				{					m_zWriteMode.IntValue = Convert.ToInt32( nodeParams[ index++ ] );				}				else				{					m_zWriteMode.ReadFromString( ref index, ref nodeParams );				}			}		}		public void ReadZTestFromString( ref uint index, ref string[] nodeParams )		{			bool validDataOnMeta = m_validZTest;			if( UIUtils.CurrentShaderVersion() > TemplatesManager.MPShaderVersion )			{				validDataOnMeta = Convert.ToBoolean( nodeParams[ index++ ] );			}			if( validDataOnMeta )			{				if( UIUtils.CurrentShaderVersion() < 15304 )				{					m_zTestMode.IntValue = Convert.ToInt32( nodeParams[ index++ ] );				}				else				{					m_zTestMode.ReadFromString( ref index, ref nodeParams );				}			}		}		public void ReadOffsetFromString( ref uint index, ref string[] nodeParams )		{			bool validDataOnMeta = m_validOffset;			if( UIUtils.CurrentShaderVersion() > TemplatesManager.MPShaderVersion )			{				validDataOnMeta = Convert.ToBoolean( nodeParams[ index++ ] );			}			if( validDataOnMeta )			{				m_offsetEnabled = Convert.ToBoolean( nodeParams[ index++ ] );				if( UIUtils.CurrentShaderVersion() < 15304 )				{					m_offsetFactor.FloatValue = Convert.ToSingle( nodeParams[ index++ ] );					m_offsetUnits.FloatValue = Convert.ToSingle( nodeParams[ index++ ] );				}				else				{					m_offsetFactor.ReadFromString( ref index, ref nodeParams, false );					m_offsetUnits.ReadFromString( ref index, ref nodeParams, false );				}			}		}		public override void ReadFromString( ref uint index, ref string[] nodeParams )		{			base.ReadFromString( ref index, ref nodeParams );			ReadZWriteFromString( ref index, ref nodeParams );			ReadZTestFromString( ref index, ref nodeParams );			ReadOffsetFromString( ref index, ref nodeParams );		}		public void WriteZWriteToString( ref string nodeInfo )		{			base.WriteToString( ref nodeInfo );			IOUtils.AddFieldValueToString( ref nodeInfo, m_validZWrite );			if( m_validZWrite )				m_zWriteMode.WriteToString( ref nodeInfo );		}		public void WriteZTestToString( ref string nodeInfo )		{			IOUtils.AddFieldValueToString( ref nodeInfo, m_validZTest );			if( m_validZTest )				m_zTestMode.WriteToString( ref nodeInfo );		}		public void WriteOffsetToString( ref string nodeInfo )		{			IOUtils.AddFieldValueToString( ref nodeInfo, m_validOffset );			if( m_validOffset )			{				IOUtils.AddFieldValueToString( ref nodeInfo, m_offsetEnabled );				m_offsetFactor.WriteToString( ref nodeInfo );				m_offsetUnits.WriteToString( ref nodeInfo );			}		}		public override void WriteToString( ref string nodeInfo )		{			WriteZWriteToString( ref nodeInfo );			WriteZTestToString( ref nodeInfo );			WriteOffsetToString( ref nodeInfo );		}		public bool IsActive { get { return ( m_zTestMode.IsValid || m_zTestMode.IntValue != 0 ) || ( m_zWriteMode.IsValid || m_zWriteMode.IntValue != 0 ) || m_offsetEnabled; } }		public string CurrentZWriteMode		{			get			{				if( m_zWriteMode.IsValid )				{					return string.Format( ZWriteFormatter, m_zWriteMode.GetValueOrProperty() ); ;				}				int finalZWrite = ( m_zWriteMode.IntValue == 0 ) ? 1 : m_zWriteMode.IntValue;				return string.Format( ZWriteFormatter, ZBufferOpHelper.ZWriteModeValues[ finalZWrite ] ); ;			}		}		public string CurrentZTestMode		{			get			{				if( m_zTestMode.IsValid )					return string.Format( ZTestFormatter, m_zTestMode.GetValueOrProperty() );				int finalZTestMode = ( m_zTestMode.IntValue == 0 ) ? 3 : m_zTestMode.IntValue;				return string.Format( ZTestFormatter, ZBufferOpHelper.ZTestModeValues[ finalZTestMode ] );			}		}		public string CurrentOffset		{			get			{				if( m_offsetEnabled )					return "Offset " + m_offsetFactor.GetValueOrProperty() + " , " + m_offsetUnits.GetValueOrProperty() + "\n";				else					return "Offset 0,0\n";			}		}		public bool ValidZTest { get { return m_validZTest; } }		public bool ValidZWrite { get { return m_validZWrite; } }		public bool ValidOffset { get { return m_validOffset; } }		public InlineProperty ZTestMode { get { return m_zTestMode; } }		public InlineProperty ZWriteMode { get { return m_zWriteMode; } }		public InlineProperty OffsetFactor { get { return m_offsetFactor; } }		public InlineProperty OffsetUnits { get { return m_offsetUnits; } }		public bool OffsetEnabled { get { return m_offsetEnabled; } }		public ZTestMode ZTestModeValue		{			set			{				m_zTestMode.IntValue = ZBufferOpHelper.ZTestModeDict[ value ];				m_zTestMode.Active = false;			}			get			{				return (ZTestMode)( m_zTestMode.IntValue - 1 );			}		}		public ZWriteMode ZWriteModeValue		{			set			{				m_zWriteMode.IntValue = ZBufferOpHelper.ZWriteModeDict[ value ];				m_zWriteMode.Active = false;			}			get			{				return (ZWriteMode)( m_zWriteMode.IntValue - 1 );			}		}		public float OffsetFactorValue		{			set			{				m_offsetEnabled = true;				m_offsetFactor.FloatValue = value;				m_offsetFactor.Active = false;			}			get			{				return m_offsetFactor.FloatValue;			}		}		public float OffsetUnitsValue		{			set			{				m_offsetEnabled = true;				m_offsetUnits.FloatValue = value;				m_offsetUnits.Active = false;			}			get			{				return m_offsetUnits.FloatValue;			}		}	}}
 |