| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 | // Amplify Shader Editor - Visual Shader Editing Tool// Copyright (c) Amplify Creations, Lda <info@amplify.pt>using UnityEngine;using System;namespace AmplifyShaderEditor{	[Serializable]	[NodeAttributes( "Rotator", "UV Coordinates", "Rotates UVs or any Vector2 value from an Anchor point for a specified Time value")]	public sealed class RotatorNode : ParentNode	{		private int m_cachedUsingEditorId = -1;		protected override void CommonInit( int uniqueId )		{			base.CommonInit( uniqueId );			AddInputPort( WirePortDataType.FLOAT2, false, "UV" );			AddInputPort( WirePortDataType.FLOAT2, false, "Anchor" );			AddInputPort( WirePortDataType.FLOAT, false, "Time" );			AddOutputPort( WirePortDataType.FLOAT2, "Out" );			m_useInternalPortData = true;			m_inputPorts[ 2 ].FloatInternalData = 1;			m_textLabelWidth = 50;			m_previewShaderGUID = "e21408a1c7f12f14bbc2652f69bce1fc";		}		public override void SetPreviewInputs()		{			base.SetPreviewInputs();			if ( m_cachedUsingEditorId == -1 )				m_cachedUsingEditorId = Shader.PropertyToID( "_UsingEditor" );			PreviewMaterial.SetFloat( m_cachedUsingEditorId, (m_inputPorts[ 2 ].IsConnected ? 0 : 1 ) );		}		public override void OnInputPortConnected( int portId, int otherNodeId, int otherPortId, bool activateNode = true )		{			base.OnInputPortConnected( portId, otherNodeId, otherPortId, activateNode );			if( portId == 2 )			{				m_continuousPreviewRefresh = false;			}		}		public override void OnInputPortDisconnected( int portId )		{			base.OnInputPortDisconnected( portId );			if( portId == 2 )			{				m_continuousPreviewRefresh = true;			}		}		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 result = string.Empty;			string uv = m_inputPorts[ 0 ].GeneratePortInstructions( ref dataCollector );			string anchor = m_inputPorts[ 1 ].GeneratePortInstructions( ref dataCollector );			string time = m_inputPorts[ 2 ].GeneratePortInstructions( ref dataCollector );			if ( !m_inputPorts[ 2 ].IsConnected )			{				if( !( dataCollector.IsTemplate && dataCollector.IsSRP ) )					dataCollector.AddToIncludes( UniqueId, Constants.UnityShaderVariables );				time += " * _Time.y";			}			result += uv;			string cosVar = "cos" + OutputId;			string sinVar = "sin" + OutputId;			dataCollector.AddLocalVariable( UniqueId, "float " + cosVar + " = cos( "+time+" );");			dataCollector.AddLocalVariable( UniqueId, "float " + sinVar + " = sin( "+time+" );");						string value =  "mul( " + result + " - " + anchor + " , float2x2( "+cosVar+" , -"+sinVar+" , "+sinVar+" , "+cosVar+" )) + "+anchor;			RegisterLocalVariable( 0, value, ref dataCollector, "rotator" + OutputId );			return m_outputPorts[ 0 ].LocalValue( dataCollector.PortCategory );		}		public override void RefreshExternalReferences()		{			base.RefreshExternalReferences();			if( UIUtils.CurrentShaderVersion() < 13107 )			{				m_inputPorts[ 2 ].FloatInternalData = 1;			}		}	}}
 |