private bool _isNameExcluded( string cls, AbstractNode parent )
{
// Run past the listener
object excludeObj;
bool excludeName = false;
ScriptCompilerEvent evt = new ProcessNameExclusionScriptCompilerEvent( cls, parent );
bool processed = _fireEvent( ref evt, out excludeObj );
if ( !processed )
{
// Process the built-in name exclusions
if ( cls == "emitter" || cls == "affector" )
{
// emitters or affectors inside a particle_system are excluded
while ( parent != null && parent is ObjectAbstractNode )
{
ObjectAbstractNode obj = (ObjectAbstractNode)parent;
if ( obj.Cls == "particle_system" )
return true;
parent = obj.Parent;
}
return false;
}
else if ( cls == "pass" )
{
// passes inside compositors are excluded
while ( parent != null && parent is ObjectAbstractNode )
{
ObjectAbstractNode obj = (ObjectAbstractNode)parent;
if ( obj.Cls == "compositor" )
return true;
parent = obj.Parent;
}
return false;
}
else if ( cls == "texture_source" )
{
// Parent must be texture_unit
while ( parent != null && parent is ObjectAbstractNode )
{
ObjectAbstractNode obj = (ObjectAbstractNode)parent;
if ( obj.Cls == "texture_unit" )
return true;
parent = obj.Parent;
}
return false;
}
}
else
{
excludeObj = (bool)excludeObj;
return excludeName;
}
return false;
}