public bool Equals(TaskDescription other) { if (ReferenceEquals(null, other)) { return(false); } if (ReferenceEquals(this, other)) { return(true); } return(Equals(other.Name, this.Name) && CollectionUtils.SequenceEqual(other.ParameterDescriptions, this.ParameterDescriptions) && Equals(other.IsDecorator, this.IsDecorator) && Equals(other.TypeName, this.TypeName) && Equals(other.ClassName, this.ClassName)); }
/// <summary> /// Generates a task description for the specified task type. /// </summary> /// <param name="taskType"> Task type. </param> /// <returns> Task description. </returns> public static TaskDescription Generate(Type taskType) { // Check for task attribute. TaskAttribute[] taskAttributes = taskType.GetCustomAttributes(typeof(TaskAttribute), true) as TaskAttribute[]; if (taskAttributes == null || taskAttributes.Length == 0) { throw new ArgumentException( "Type {0} doesn't have a task attribute which specifies the class as a behavior tree task.", taskType.Name); } TaskAttribute taskAttribute = taskAttributes[0]; TaskDescription description = new TaskDescription { Name = taskAttribute.Name, Description = taskAttribute.Description, IsDecorator = taskAttribute.IsDecorator, ClassName = taskType.Name, TypeName = taskType.AssemblyQualifiedName, ParameterDescriptions = new List <TaskParameterDescription>() }; MemberInfo[] parameterMembers = taskType.GetMembers(); foreach (MemberInfo parameterMember in parameterMembers) { TaskParameterDescription parameterDescription = TaskParameterDescription.Generate(parameterMember); if (parameterDescription == null) { continue; } description.ParameterDescriptions.Add(parameterDescription); } return(description); }