Пример #1
0
		/// <summary>
		/// Returns true if the given class is name excluded
		/// </summary>
		/// <param name="cls"></param>
		/// <param name="parent"></param>
		/// <returns></returns>
		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;
		}