Example #1
0
 public LispParser.Node BuildParseTree()
 {
     LispParser.MethodNode node = new LispParser.MethodNode("TaskUtility");
     node.Add(UtilityComputer.BuildParseTree());
     node.Add(Task.BuildParseTree());
     return(node);
 }
Example #2
0
        LispParser.ICanCreateFromLispParseTree <TBb> LispParser.ICompiler <TBb> .Compile(TBb blackboard, LispParser.Node parseTree)
        {
            foreach (LispParser.ICanCreateFromLispParseTree <TBb> creator in Creators)
            {
                LispParser.ICanCreateFromLispParseTree <TBb> result = creator.CreateFromParseTree(blackboard, parseTree, this);
                if (result != null)
                {
                    return(result);
                }
            }

            // For named couritines, we rewrite the parsetree to be able to use the regular flow.
            LispParser.MethodNode method = parseTree as LispParser.MethodNode;
            if (method != null)
            {
                Func <IEnumerator <TaskState> > function = blackboard.GetCoRoutineFunc(method.Identifier.Value);
                if (function != null)
                {
                    method.Add(method.Identifier);
                    method.Identifier = new LispParser.IdentifierNode("NamedCoroutine");
                    LispParser.ICanCreateFromLispParseTree <TBb> result = ((LispParser.ICanCreateFromLispParseTree <TBb>)_namedCoroutine).CreateFromParseTree(blackboard, method, this);
                    if (result != null)
                    {
                        return(result);
                    }
                }
            }

            throw new InvalidOperationException(
                      string.Format("Unrecognized token: {0}.", parseTree));
        }
Example #3
0
        public virtual LispParser.MethodNode BuildParseTree()
        {
            string className = GetClassName();

            LispParser.MethodNode node = new LispParser.MethodNode(className);
            node.Add("Name", Name, true);
            return(node);
        }
Example #4
0
 public LispParser.Node BuildParseTree()
 {
     LispParser.MethodNode node = new LispParser.MethodNode("BehaviourTree");
     node.Add("Name", Name, true);
     node.Add("RunningTaskHysterisis", RunningTaskHysterisis);
     node.Add(RootTask.BuildParseTree());
     return(node);
 }
Example #5
0
 public override LispParser.MethodNode BuildParseTree()
 {
     LispParser.MethodNode node = base.BuildParseTree();
     foreach (TaskUtility <TBb> taskUtility in Children)
     {
         node.Children.Add(taskUtility.BuildParseTree());
     }
     return(node);
 }
Example #6
0
 public override LispParser.MethodNode BuildParseTree()
 {
     // Named Coroutine is hidden in the code, so this behaves slightly differently than would be expected
     //LispParser.MethodNode node = base.BuildParseTree();
     //node.Add(NamedCoroutineCreator.BuildParseTree());
     //return node;
     LispParser.MethodNode node = new LispParser.MethodNode(NamedCoroutineCreator.Name);
     node.Add("Name", Name, true);
     return(node);
 }
Example #7
0
        public override LispParser.MethodNode BuildParseTree()
        {
            LispParser.MethodNode node = (LispParser.MethodNode)base.BuildParseTree();
            if (Predicate != null)
            {
                node.Add("if", Predicate.BuildParseTree());
            }

            foreach (TreeTask <TBb> treeTask in Children)
            {
                node.Add(treeTask.BuildParseTree());
            }
            return(node);
        }
Example #8
0
        public LispParser.ICanCreateFromLispParseTree <TBb> CreateFromParseTree(TBb blackboard, LispParser.Node node, LispParser.ICompiler <TBb> compiler)
        {
            LispParser.MethodNode method = node as LispParser.MethodNode;

            if (method == null || method.MethodName != "TaskUtility")
            {
                return(null);
            }

            TaskUtility <TBb> taskUtility = new TaskUtility <TBb>(null, null);

            taskUtility.UtilityComputer = ((BehaviourTreeCompiler <TBb>)compiler).LispCompiler.Compile(blackboard, method.Children[0]);
            if (!(taskUtility.UtilityComputer is ICanEvaluateToFloat))
            {
                throw new InvalidOperationException("The utility computer must evaluate to a float!");
            }
            taskUtility.Task = (TreeTask <TBb>)compiler.Compile(blackboard, method.Children[1]);
            return(taskUtility);
        }
Example #9
0
        LispParser.ICanCreateFromLispParseTree <TBb> LispParser.ICanCreateFromLispParseTree <TBb> .CreateFromParseTree(TBb blackboard, LispParser.Node node, LispParser.ICompiler <TBb> compiler)
        {
            LispParser.MethodNode method = node as LispParser.MethodNode;
            if (method == null)
            {
                return(null);
            }

            if (method.MethodName == GetClassName())
            {
                TreeTask <TBb> treeTask = CreateTreeTaskFromParseTree(blackboard, method, compiler);
                foreach (LispParser.Node child in method.Children)
                {
                    child.NamedParamX <LispParser.StringNode>("Name", v => treeTask.Name = v.Value);
                }
                return(treeTask);
            }
            else
            {
                return(null);
            }
        }
Example #10
0
        public LispParser.ICanCreateFromLispParseTree <TBb> CreateFromParseTree(TBb blackboard, LispParser.Node node, LispParser.ICompiler <TBb> compiler)
        {
            LispParser.MethodNode method = node as LispParser.MethodNode;
            if (method == null)
            {
                throw new InvalidOperationException("Expected BehaviourTree but found: null");
            }

            if (method.MethodName != "BehaviourTree")
            {
                throw new InvalidOperationException("Expected BehaviourTree but found: " + method);
            }

            BehaviourTree <TBb> behaviourTree = new BehaviourTree <TBb>(null, null);

            foreach (LispParser.Node child in method.Children)
            {
                child.NamedParamX <LispParser.NumberNode>("RunningTaskHysterisis", v => behaviourTree.RunningTaskHysterisis = (int)v.FloatValue);
                child.NamedParamX <LispParser.StringNode>("Name", v => behaviourTree.Name = v.Value);
                child.ParamX <LispParser.MethodNode>(null, v => behaviourTree.RootTask    = (TreeTask <TBb>)compiler.Compile(blackboard, v));
            }

            return(behaviourTree);
        }
Example #11
0
 protected abstract TreeTask <TBb> CreateTreeTaskFromParseTree(TBb blackboard, LispParser.MethodNode method, LispParser.ICompiler <TBb> compiler);
Example #12
0
 public override LispParser.MethodNode BuildParseTree()
 {
     LispParser.MethodNode node = new LispParser.MethodNode("DebugLog");
     node.Add(StringComputer.BuildParseTree());
     return(node);
 }
Example #13
0
        protected override TreeTask <TBb> CreateTreeTaskFromParseTree(TBb blackboard, LispParser.MethodNode method, LispParser.ICompiler <TBb> compiler)
        {
            DebugLog <TBb> debugLog = new DebugLog <TBb>(null);

            debugLog.StringComputer = ((BehaviourTreeCompiler <TBb>)compiler).LispCompiler.Compile(blackboard, method.Children[0]);
            if (!(debugLog.StringComputer is ICanEvaluateToString))
            {
                throw new InvalidOperationException("The string computer must evaluate to a string!");
            }
            return(debugLog);
        }
Example #14
0
 protected override UtilityControlFlowNode <TBb> CreateUtilityControlFlow(TBb blackboard, LispParser.MethodNode method, LispParser.ICompiler <TBb> compiler)
 {
     return(new UtilitySelector <TBb>());
 }
Example #15
0
        protected override TreeTask <TBb> CreateTreeTaskFromParseTree(TBb blackboard, LispParser.MethodNode method, LispParser.ICompiler <TBb> compiler)
        {
            FixedResultState <TBb> fixedResultState = new FixedResultState <TBb>(ResultState);

            foreach (LispParser.Node child in method.Children)
            {
                child.NamedParamX <LispParser.StringNode>("ResultState", v => fixedResultState.ResultState = (TaskState)Enum.Parse(typeof(TaskState), v.Value));
            }
            return(fixedResultState);
        }
Example #16
0
 protected abstract ControlFlowNode <TBb> CreateControlFlow(TBb blackboard, LispParser.MethodNode method, LispParser.ICompiler <TBb> compiler);
Example #17
0
 protected override TreeTask <TBb> CreateTreeTaskFromParseTree(TBb blackboard, LispParser.MethodNode method, LispParser.ICompiler <TBb> compiler)
 {
     throw new InvalidOperationException("Not implemented!");
 }
Example #18
0
        protected override TreeTask <TBb> CreateTreeTaskFromParseTree(TBb blackboard, LispParser.MethodNode method, LispParser.ICompiler <TBb> compiler)
        {
            UtilityControlFlowNode <TBb> utilityControlFlowNode = CreateUtilityControlFlow(blackboard, method, compiler);

            if (utilityControlFlowNode == null)
            {
                return(null);
            }

            foreach (LispParser.Node child in method.Children)
            {
                child.NamedParamX <LispParser.StringNode>("Name", v => utilityControlFlowNode.Name = v.Value);
                child.ParamX <LispParser.MethodNode>(null, v => utilityControlFlowNode.Children.Add((TaskUtility <TBb>)compiler.Compile(blackboard, child)));
            }

            return(utilityControlFlowNode);
        }
Example #19
0
 public override LispParser.MethodNode BuildParseTree()
 {
     LispParser.MethodNode method = base.BuildParseTree();
     method.Children.Insert(0, new LispParser.NamedParameterNode("MaxRunTimes", MaxRunTimes));
     return(method);
 }
Example #20
0
        protected override Decorator <TBb> CreateDecoratorFromParseTree(TBb blackboard, LispParser.MethodNode method, LispParser.ICompiler <TBb> compiler)
        {
            RunNTimes <TBb> runNTimes = new RunNTimes <TBb>(null);

            foreach (LispParser.Node child in method.Children)
            {
                child.NamedParamX <LispParser.IntegerNode>("MaxRunTimes", x => runNTimes.MaxRunTimes = x.Value);
            }
            return(runNTimes);
        }
Example #21
0
 public override LispParser.MethodNode BuildParseTree()
 {
     LispParser.MethodNode node = base.BuildParseTree();
     node.Add(DecoratedTask.BuildParseTree());
     return(node);
 }
Example #22
0
 protected override TreeTask <TBb> CreateTreeTaskFromParseTree(TBb blackboard, LispParser.MethodNode method, LispParser.ICompiler <TBb> compiler)
 {
     throw new NotImplementedException();
 }
Example #23
0
 protected override TreeTask <TBb> CreateTreeTaskFromParseTree(TBb blackboard, LispParser.MethodNode method, LispParser.ICompiler <TBb> compiler)
 {
     return(new KeepRunning <TBb>());
 }
Example #24
0
        protected override TreeTask <TBb> CreateTreeTaskFromParseTree(TBb blackboard, LispParser.MethodNode method, LispParser.ICompiler <TBb> compiler)
        {
            Decorator <TBb> decorator = CreateDecoratorFromParseTree(blackboard, method, compiler);

            if (decorator != null)
            {
                if (decorator.GetType() != GetType())
                {
                    throw new InvalidOperationException(
                              string.Format(
                                  "Expected {0} but compiled to {1}!",
                                  TypeHelper.GetFriendlyTypeName(GetType()),
                                  TypeHelper.GetFriendlyTypeName(decorator.GetType())));
                }

                decorator.DecoratedTask = (TreeTask <TBb>)compiler.Compile(blackboard, method.Children.OfType <LispParser.MethodNode>().Single());
            }
            return(decorator);
        }
Example #25
0
 protected override ControlFlowNode <TBb> CreateControlFlow(TBb blackboard, LispParser.MethodNode method, LispParser.ICompiler <TBb> compiler)
 {
     return(new Sequence <TBb>());
 }
Example #26
0
 protected abstract Decorator <TBb> CreateDecoratorFromParseTree(TBb blackboard, LispParser.MethodNode method, LispParser.ICompiler <TBb> compiler);
Example #27
0
        protected override TreeTask <TBb> CreateTreeTaskFromParseTree(TBb blackboard, LispParser.MethodNode method, LispParser.ICompiler <TBb> compiler)
        {
            ControlFlowNode <TBb> controlFlowNode = CreateControlFlow(blackboard, method, compiler);

            if (controlFlowNode == null)
            {
                return(null);
            }

            foreach (LispParser.Node child in method.Children)
            {
                bool handled =
                    child.NamedParamX <LispParser.StringNode>("Name", v => controlFlowNode.Name = v.Value) ||
                    child.ParamX <LispParser.MethodNode>(null, v => controlFlowNode.Children.Add((TreeTask <TBb>)compiler.Compile(blackboard, child)));

                if (!handled)
                {
                    LispParser.NamedParameterNode named = child as LispParser.NamedParameterNode;

                    if (named != null && named.Identifier.Value == "if")
                    {
                        controlFlowNode.Predicate = ((BehaviourTreeCompiler <TBb>)compiler).LispCompiler.Compile(blackboard, named.Value);
                        if (!(controlFlowNode.Predicate is ICanEvaluateToBool))
                        {
                            throw new InvalidOperationException(
                                      string.Format(
                                          "The if predicate must evaluate to a bool, {0} doesn't!",
                                          named.Value));
                        }
                        continue;
                    }

                    throw new InvalidOperationException(
                              string.Format(
                                  "Unhandled child {0} on {1}!",
                                  child,
                                  this));
                }
            }

            return(controlFlowNode);
        }
Example #28
0
 protected override Decorator <TBb> CreateDecoratorFromParseTree(TBb blackboard, LispParser.MethodNode method, LispParser.ICompiler <TBb> compiler)
 {
     return(new Counter <TBb>(null));
 }
Example #29
0
 public override LispParser.MethodNode BuildParseTree()
 {
     LispParser.MethodNode node = base.BuildParseTree();
     node.Add("ResultState", ResultState.ToString());
     return(node);
 }
Example #30
0
 protected override TreeTask <TBb> CreateTreeTaskFromParseTree(TBb blackboard, LispParser.MethodNode method, LispParser.ICompiler <TBb> compiler)
 {
     throw new NotImplementedException("Not implemented, use NamedCoroutine instead?");
 }