public override void Translate( ScriptCompiler compiler, AbstractNode node )
{
ObjectAbstractNode obj = (ObjectAbstractNode)node;
CompositionTechnique technique = (CompositionTechnique)obj.Parent.Context;
if ( obj.Id == (uint)Keywords.ID_TARGET )
{
_Target = technique.CreateTargetPass();
if ( !string.IsNullOrEmpty( obj.Name ) )
_Target.OutputName = obj.Name;
}
else if ( obj.Id == (uint)Keywords.ID_TARGET_OUTPUT )
{
_Target = technique.OutputTarget;
}
obj.Context = _Target;
foreach ( AbstractNode i in obj.Children )
{
if ( i is ObjectAbstractNode )
{
_processNode( compiler, i );
}
else if ( i is PropertyAbstractNode )
{
PropertyAbstractNode prop = (PropertyAbstractNode)i;
switch ( (Keywords)prop.Id )
{
#region ID_INPUT
case Keywords.ID_INPUT:
if ( prop.Values.Count == 0 )
{
compiler.AddError( CompileErrorCode.StringExpected, prop.File, prop.Line );
return;
}
else if ( prop.Values.Count > 1 )
{
compiler.AddError( CompileErrorCode.FewerParametersExpected, prop.File, prop.Line );
return;
}
else
{
if ( prop.Values[ 0 ] is AtomAbstractNode )
{
AtomAbstractNode atom = (AtomAbstractNode)prop.Values[ 0 ];
switch ( (Keywords)atom.Id )
{
case Keywords.ID_NONE:
_Target.InputMode = CompositorInputMode.None;
break;
case Keywords.ID_PREVIOUS:
_Target.InputMode = CompositorInputMode.Previous;
break;
default:
compiler.AddError( CompileErrorCode.InvalidParameters, prop.File, prop.Line );
break;
}
}
else
{
compiler.AddError( CompileErrorCode.InvalidParameters, prop.File, prop.Line );
}
}
break;
#endregion ID_INPUT
#region ID_ONLY_INITIAL
case Keywords.ID_ONLY_INITIAL:
if ( prop.Values.Count == 0 )
{
compiler.AddError( CompileErrorCode.StringExpected, prop.File, prop.Line );
return;
}
else if ( prop.Values.Count > 1 )
{
compiler.AddError( CompileErrorCode.FewerParametersExpected, prop.File, prop.Line );
return;
}
else
{
bool val = false;
if ( getBoolean( prop.Values[ 0 ], out val ) )
{
_Target.OnlyInitial = val;
}
else
{
compiler.AddError( CompileErrorCode.InvalidParameters, prop.File, prop.Line );
}
}
break;
#endregion ID_ONLY_INITIAL
#region ID_VISIBILITY_MASK
case Keywords.ID_VISIBILITY_MASK:
if ( prop.Values.Count == 0 )
{
compiler.AddError( CompileErrorCode.StringExpected, prop.File, prop.Line );
return;
}
else if ( prop.Values.Count > 1 )
{
compiler.AddError( CompileErrorCode.FewerParametersExpected, prop.File, prop.Line );
return;
}
else
{
uint val;
if ( getUInt( prop.Values[ 0 ], out val ) )
{
_Target.VisibilityMask = val;
}
else
{
compiler.AddError( CompileErrorCode.InvalidParameters, prop.File, prop.Line );
}
}
break;
#endregion ID_VISIBILITY_MASK
#region ID_LOD_BIAS
case Keywords.ID_LOD_BIAS:
if ( prop.Values.Count == 0 )
{
compiler.AddError( CompileErrorCode.StringExpected, prop.File, prop.Line );
return;
}
else if ( prop.Values.Count > 1 )
{
compiler.AddError( CompileErrorCode.FewerParametersExpected, prop.File, prop.Line );
return;
}
else
{
float val;
if ( getFloat( prop.Values[ 0 ], out val ) )
{
_Target.LodBias = val;
}
else
{
compiler.AddError( CompileErrorCode.InvalidParameters, prop.File, prop.Line );
}
}
break;
#endregion ID_LOD_BIAS
#region ID_MATERIAL_SCHEME
case Keywords.ID_MATERIAL_SCHEME:
if ( prop.Values.Count == 0 )
{
compiler.AddError( CompileErrorCode.StringExpected, prop.File, prop.Line );
return;
}
else if ( prop.Values.Count > 1 )
{
compiler.AddError( CompileErrorCode.FewerParametersExpected, prop.File, prop.Line );
return;
}
else
{
string val;
if ( getString( prop.Values[ 0 ], out val ) )
{
_Target.MaterialScheme = val;
}
else
{
compiler.AddError( CompileErrorCode.InvalidParameters, prop.File, prop.Line );
}
}
break;
#endregion ID_MATERIAL_SCHEME
#region ID_SHADOWS_ENABLED
case Keywords.ID_SHADOWS_ENABLED:
if ( prop.Values.Count == 0 )
{
compiler.AddError( CompileErrorCode.StringExpected, prop.File, prop.Line );
return;
}
else if ( prop.Values.Count > 1 )
{
compiler.AddError( CompileErrorCode.FewerParametersExpected, prop.File, prop.Line );
return;
}
else
{
bool val;
if ( getBoolean( prop.Values[ 0 ], out val ) )
{
_Target.ShadowsEnabled = val;
}
else
{
compiler.AddError( CompileErrorCode.InvalidParameters, prop.File, prop.Line );
}
}
break;
#endregion ID_SHADOWS_ENABLED
default:
compiler.AddError( CompileErrorCode.UnexpectedToken, prop.File, prop.Line,
"token \"" + prop.Name + "\" is not recognized" );
break;
}
}
}
}