Axiom.Serialization.MaterialSerializer.ProcessAutoProgramParam C# (CSharp) Метод

ProcessAutoProgramParam() защищенный статический Метод

protected static ProcessAutoProgramParam ( int index, string commandName, string parameters, MaterialScriptContext context ) : void
index int
commandName string
parameters string
context MaterialScriptContext
Результат void
		protected static void ProcessAutoProgramParam( int index, string commandName, string[] parameters, MaterialScriptContext context )
		{
			bool extras = false;

			object val = ScriptEnumAttribute.Lookup( parameters[ 1 ], typeof( GpuProgramParameters.AutoConstantType ) );

			if ( val != null )
			{
				bool isFloat = false;
				GpuProgramParameters.AutoConstantType constantType = (GpuProgramParameters.AutoConstantType)val;

				// these types require extra data
				if ( constantType == GpuProgramParameters.AutoConstantType.LightDiffuseColor ||
					constantType == GpuProgramParameters.AutoConstantType.LightSpecularColor ||
					constantType == GpuProgramParameters.AutoConstantType.LightAttenuation ||
					constantType == GpuProgramParameters.AutoConstantType.LightPosition ||
					constantType == GpuProgramParameters.AutoConstantType.LightDirection ||
					constantType == GpuProgramParameters.AutoConstantType.LightPositionObjectSpace ||
					constantType == GpuProgramParameters.AutoConstantType.LightDirectionObjectSpace ||
					constantType == GpuProgramParameters.AutoConstantType.Custom )
				{

					extras = true;
					isFloat = false;
				}
				else if ( constantType == GpuProgramParameters.AutoConstantType.Time_0_X ||
						   constantType == GpuProgramParameters.AutoConstantType.SinTime_0_X )
				{
					extras = true;
					isFloat = true;
				}


				// do we require extra data for this parameter?
				if ( extras )
				{
					if ( parameters.Length != 3 )
					{
						LogParseError( context, "Invalid {0} attribute - Expected 3 parameters.", commandName );
						return;
					}
				}
				if ( isFloat && extras )
					context.programParams.SetAutoConstant( index, constantType, float.Parse( parameters[ 2 ] ) );
				else if ( extras )
					context.programParams.SetAutoConstant( index, constantType, int.Parse( parameters[ 2 ] ) );
				else if ( constantType == GpuProgramParameters.AutoConstantType.Time )
				{
					if ( parameters.Length == 3 )
						context.programParams.SetAutoConstant( index, constantType, float.Parse( parameters[ 2 ] ) );
					else
						context.programParams.SetAutoConstant( index, constantType, 1.0f );
				}
				else
					context.programParams.SetAutoConstant( index, constantType, 0 );
			}
			else
			{
				string legalValues = ScriptEnumAttribute.GetLegalValues( typeof( GpuProgramParameters.AutoConstantType ) );
				LogParseError( context, "Bad auto gpu program param - Invalid param type '{0}', valid values are {1}.", parameters[ 1 ], legalValues );
				return;
			}
		}