///Get all defined BBParameters in the graph. Defined means that the BBParameter is set to read or write to/from a Blackboard and is not "|NONE|" public BBParameter[] GetDefinedParameters() { var bbParams = new List <BBParameter>(); var objects = new List <object>(); objects.AddRange(GetAllTasksOfType <Task>().Cast <object>()); objects.AddRange(allNodes.Cast <object>()); for (var i = 0; i < objects.Count; i++) { var o = objects[i]; if (o is Task) { var task = (Task)o; if (task.agentIsOverride && !string.IsNullOrEmpty(task.overrideAgentParameterName)) { bbParams.Add(typeof(Task).RTGetField("overrideAgent").GetValue(task) as BBParameter); } } foreach (BBParameter bbParam in BBParameter.GetObjectBBParameters(o)) { if (bbParam != null && bbParam.useBlackboard && !bbParam.isNone) { bbParams.Add(bbParam); } } } return(bbParams.ToArray()); }
///Returns an element that includes tasks and parameters for target object recursively public static Hierarchy.Element GetTaskAndParametersStructureInTarget(object obj) { var parentElement = new Hierarchy.Element(obj); var resultObjects = new List <object>(); if (obj is ITaskAssignable && (obj as ITaskAssignable).task != null) { resultObjects.Add((obj as ITaskAssignable).task); } if (obj is ISubTasksContainer) { var subs = (obj as ISubTasksContainer).GetSubTasks(); if (subs != null) { resultObjects.AddRange(subs); } } //this also handles ISubParametersContainer resultObjects.AddRange(BBParameter.GetObjectBBParameters(obj).ToArray()); //recurse for (var i = 0; i < resultObjects.Count; i++) { parentElement.AddChild(GetTaskAndParametersStructureInTarget(resultObjects[i])); } return(parentElement); }
///Get a list of BBParameter names used by the target element object. public static List <string> GetUsedParameterNamesOfTarget(object target) { var result = new List <string>(); if (target == null) { return(result); } result.AddRange(BBParameter.GetObjectBBParameters(target).Select(p => p.name)); var task = target as Task; if (task != null) { result.AddRange(BBParameter.GetObjectBBParameters(task).Select(p => p.name)); if (!string.IsNullOrEmpty(task.overrideAgentParameterName)) { result.Add(task.overrideAgentParameterName); } } var taskActionList = target as ActionList; if (taskActionList != null) { for (var i = 0; i < taskActionList.actions.Count; i++) { var t = taskActionList.actions[i]; result.AddRange(BBParameter.GetObjectBBParameters(t).Select(p => p.name)); if (!string.IsNullOrEmpty(t.overrideAgentParameterName)) { result.Add(t.overrideAgentParameterName); } } } var taskConditionList = target as ConditionList; if (taskConditionList != null) { for (var i = 0; i < taskConditionList.conditions.Count; i++) { var t = taskConditionList.conditions[i]; result.AddRange(BBParameter.GetObjectBBParameters(t).Select(p => p.name)); if (!string.IsNullOrEmpty(t.overrideAgentParameterName)) { result.Add(t.overrideAgentParameterName); } } } var subContainer = target as ISubTasksContainer; if (subContainer != null) { var subTasks = subContainer.GetSubTasks(); for (var i = 0; i < subTasks.Length; i++) { result.AddRange(GetUsedParameterNamesOfTarget(subTasks[i])); } } var assignable = target as ITaskAssignable; if (assignable != null && assignable.task != null) { result.AddRange(GetUsedParameterNamesOfTarget(assignable.task)); } return(result); }