Exemple #1
0
        ///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);
        }
Exemple #3
0
        ///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);
        }