public void ContinuesAfterSuccess()
        {
            // three children: success, failure, other
            // index should continue after success and tick failure
            // index should restart after failure and success should be ticked again
            // halt should be called on all children after each failure
            var alwaysSuccessChild = new ReturnXNode(NodeStatus.SUCCESS);
            var alwaysFailureChild = new ReturnXNode(NodeStatus.FAILURE);
            var otherChild         = new ReturnXNode(NodeStatus.SUCCESS);
            var node = new SequenceNode(new List <INode>
            {
                alwaysSuccessChild,
                alwaysFailureChild,
                otherChild,
            });

            var status = node.Tick();

            Assert.That(status, Is.EqualTo(NodeStatus.FAILURE));
            Assert.That(alwaysSuccessChild.Ticks, Is.EqualTo(1));
            Assert.That(alwaysFailureChild.Ticks, Is.EqualTo(1));
            Assert.That(otherChild.Ticks, Is.EqualTo(0));
            Assert.That(alwaysSuccessChild.Halts, Is.EqualTo(1));
            Assert.That(alwaysFailureChild.Halts, Is.EqualTo(1));
            Assert.That(otherChild.Halts, Is.EqualTo(1));

            status = node.Tick();
            Assert.That(status, Is.EqualTo(NodeStatus.FAILURE));
            Assert.That(alwaysSuccessChild.Ticks, Is.EqualTo(2));
            Assert.That(alwaysFailureChild.Ticks, Is.EqualTo(2));
            Assert.That(otherChild.Ticks, Is.EqualTo(0));
            Assert.That(alwaysSuccessChild.Halts, Is.EqualTo(2));
            Assert.That(alwaysFailureChild.Halts, Is.EqualTo(2));
            Assert.That(otherChild.Halts, Is.EqualTo(2));
        }
        public void NoChildrenReturnsSuccess()
        {
            var node   = new SequenceNode(Array.Empty <INode>());
            var status = node.Tick();

            Assert.That(status, Is.EqualTo(NodeStatus.SUCCESS));
        }
示例#3
0
        public static void LoadChildren(SequenceNode root, YamlSequenceNode sequence)
        {
            foreach (var child in sequence.Children)
            {
                if (child is YamlSequenceNode)
                {
                    var node = root.AddChild(new SequenceNode(root.Value, child, ImageLoad.GetImageIndex(child), id, root));
                    id++;
                    LoadChildren(node as SequenceNode, child as YamlSequenceNode);
                }
                else if (child is YamlMappingNode)
                {
                    var teste = child as YamlMappingNode;
                    var node  = root.AddChild(new MappingNode(root.Value, child, ImageLoad.GetImageIndex(child), id, root));
                    id++;

                    LoadChildren(node as MappingNode, child as YamlMappingNode);
                }
                else if (child is YamlScalarNode)
                {
                    var scalar = child as YamlScalarNode;
                    var node   = root.AddChild(new ScalarNode(scalar.Value, child, scalar.Tag, ImageLoad.GetImageIndex(child), id, root));
                    id++;
                }
            }
        }
示例#4
0
 public void Run()
 {
     _node = this.Sequence(this.env)
             .While(() => {
         return(percent < 1);
     },
                    () => {
         if (recyled)
         {
             return;
         }
         _curdur += Time.deltaTime;
         MoveNext();
     })
             .OnCompelete(() =>
     {
         _curdur = 0;
         OnComplete();
         if (onCompelete != null)
         {
             onCompelete();
         }
         compeleted = true;
     })
             .Run();
 }
 protected internal virtual void VisitSequence(SequenceNode node)
 {
     foreach (var child in node.Nodes)
     {
         Visit(child);
     }
 }
示例#6
0
 public static void LoadTreeNode(TreeNode treeNode, SequenceNode rootNode)
 {
     foreach (var child in rootNode.Children)
     {
         if (child is ScalarNode)
         {
             ScalarNode scalarChild = (ScalarNode)child;
             var        node        = treeNode.Nodes.Add(scalarChild.Value);
             node.ImageIndex = scalarChild.ImageIndex;
             node.Tag        = child.Tag;
         }
         else if (child is SequenceNode)
         {
             var node = treeNode.Nodes.Add(child.Value);
             node.Tag        = child.Tag;
             node.ImageIndex = child.ImageIndex;
             LoadTreeNode(node, child as SequenceNode);
         }
         else if (child is MappingNode)
         {
             var node = treeNode.Nodes.Add(child.Value);
             node.Tag        = child.Tag;
             node.ImageIndex = child.ImageIndex;
             LoadTreeNode(node, child as MappingNode);
         }
     }
 }
示例#7
0
    private void RemoveTween(object node)
    {
        SequenceNode mNode = node as SequenceNode;

        sequence.nodes.Remove(mNode);
        EditorUtility.SetDirty(tweener);
    }
示例#8
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="node_"></param>
        public virtual void Load(XmlNode node_)
        {
            Id = int.Parse(node_.Attributes["id"].Value);
            if (_newId <= Id)
            {
                _newId = Id + 1;
            }
            Name        = node_.Attributes["name"].Value;
            Description = node_.Attributes["description"].Value;

            foreach (XmlNode nodeNode in node_.SelectNodes("NodeList/Node"))
            {
                int versionNode = int.Parse(nodeNode.Attributes["version"].Value);

                SequenceNode seqNode = SequenceNode.CreateNodeFromXml(nodeNode);

                if (seqNode != null)
                {
                    AddNode(seqNode);
                }
                else
                {
                    throw new InvalidOperationException("Can't create SequenceNode from xml " + string.Format("id={0}", nodeNode.Attributes["id"].Value));
                }
            }
        }
 protected override void OnDispose()
 {
     base.OnDispose();
     _repeatNode?.Dispose();
     _repeatNode   = null;
     _sequenceNode = null;
 }
示例#10
0
    private IEnumerator JumpSequence(MovementSequence _sequence, SequenceNode _node, SequenceCallback _completionCallback)
    {
        float   _jumpSpeed = jumpStartSpeed;
        Vector2 _peak;

        if (zoneNumber == 0)
        {
            _peak = new Vector2(
                (character.transform.position.x + _node.transform.position.x) / 2,
                Mathf.Max(character.transform.position.y, _node.transform.position.y) + 1f
                );
        }
        else if (zoneNumber == 1)
        {
            _peak = new Vector2(
                Mathf.Min(character.transform.position.x, _node.transform.position.x) - 1f,
                (character.transform.position.y + _node.transform.position.y) / 2f
                );
        }
        else if (zoneNumber == 2)
        {
            _peak = new Vector2(
                (character.transform.position.x + _node.transform.position.x) / 2,
                Mathf.Min(character.transform.position.y, _node.transform.position.y) - 1f
                );
        }
        else
        {
            _peak = new Vector2(
                Mathf.Max(character.transform.position.x, _node.transform.position.x) + 1f,
                (character.transform.position.y + _node.transform.position.y) / 2f
                );
        }

        while (Vector2.Distance(character.transform.position, _peak) > 0.1f)
        {
            character.transform.position = Vector2.MoveTowards(character.transform.position, _peak, _jumpSpeed * Time.deltaTime);
            if (_jumpSpeed < jumpMaxSpeed)
            {
                _jumpSpeed += jumpSpeedIncrease * Time.deltaTime;
            }

            yield return(new WaitForEndOfFrame());
        }

        while (Vector2.Distance(character.transform.position, _node.transform.position) > 0.1f)
        {
            character.transform.position = Vector2.MoveTowards(character.transform.position, _node.transform.position, _jumpSpeed * Time.deltaTime);
            if (_jumpSpeed < jumpMaxSpeed)
            {
                _jumpSpeed += jumpSpeedIncrease * Time.deltaTime;
            }

            yield return(new WaitForEndOfFrame());
        }

        moveNextNode(_sequence, _completionCallback);

        yield return(new WaitForEndOfFrame());
    }
示例#11
0
    void BuildTree()
    {
        var rootRepeat       = new NaiveRepeater("rootRepeat", bt);
        var rootSel          = new SelectorNode("rootSel", bt);
        var parry            = new ActionNode("parry", Parry, bt);
        var counter          = new ActionNode("counter", Counter, bt);
        var defendSeq        = new SequenceNode("defendSeq", bt);
        var attackAndRecover = new ActionNode("attackAndRecover", AttackAndRecover, bt);
        var attacked         = new ActionNode("attacked", Attacked, bt);
        var dashSel          = new SelectorNode("dashSel", bt);
        var back             = new ActionNode("back", Back, bt);
        var attackSeq        = new SequenceNode("attackSeq", bt);

        rootRepeat.Build(
            rootSel.Build(
                defendSeq.Build(
                    parry,
                    counter
                    ),
                attackSeq.Build(
                    dashSel.Build(
                        attackAndRecover,
                        attacked
                        ),
                    back
                    )
                )
            );

        bt.Build(rootRepeat);
    }
示例#12
0
        public void Sequence_Node_Succeds_When_All_Childs_Succeeds(int childsCount)
        {
            SequenceNode seq = new SequenceNode();

            for (int i = 0; i < childsCount; i++)
            {
                var mock = Substitute.For <BTNode>();
                mock.Update().Returns(NodeState.Success);
                seq.AddChild(mock);
            }

            if (childsCount == 0)
            {
                Assert.IsTrue(seq.Update() == NodeState.Success);
            }
            else
            {
                for (int i = 0; i < childsCount; i++)
                {
                    if (i == childsCount - 1)
                    {
                        Assert.IsTrue(seq.Update() == NodeState.Success);
                    }
                    else
                    {
                        Assert.IsTrue(seq.Update() == NodeState.Running);
                    }
                }
            }
        }
示例#13
0
 private void SequenceAddedInvoker(SequenceNode sequence)
 {
     if (SequenceAdded != null)
     {
         SequenceAdded(this, new SequenceAddedArgs(sequence));
     }
 }
        public void RestartsAfterRunning()
        {
            // three children: success, running, other
            // index should continue after success and tick running
            // index should restart after running, and success should be ticked again
            // halts should not be called on incomplete sequences
            var success = new ReturnXNode(NodeStatus.SUCCESS);
            var running = new ReturnXNode(NodeStatus.RUNNING);
            var other   = new ReturnXNode(NodeStatus.SUCCESS);
            var node    = new SequenceNode(new List <INode>
            {
                success,
                running,
                other,
            });

            var status = node.Tick();

            Assert.That(status, Is.EqualTo(NodeStatus.RUNNING));
            Assert.That(success.Ticks, Is.EqualTo(1));
            Assert.That(running.Ticks, Is.EqualTo(1));
            Assert.That(other.Ticks, Is.EqualTo(0));
            Assert.That(success.Halts, Is.EqualTo(0));
            Assert.That(running.Halts, Is.EqualTo(0));
            Assert.That(other.Halts, Is.EqualTo(0));

            status = node.Tick();
            Assert.That(status, Is.EqualTo(NodeStatus.RUNNING));
            Assert.That(success.Ticks, Is.EqualTo(2));
            Assert.That(running.Ticks, Is.EqualTo(2));
            Assert.That(other.Ticks, Is.EqualTo(0));
            Assert.That(success.Halts, Is.EqualTo(0));
            Assert.That(running.Halts, Is.EqualTo(0));
            Assert.That(other.Halts, Is.EqualTo(0));
        }
示例#15
0
                internal override GlobNode StartLevel()
                {
                    var node = new SequenceNode(this);

                    nodes.Add(node);
                    return(node.StartLevel());
                }
 public void Start()
 {
     sendheartPackTime     = 0f;
     recvHearPackTime      = 0f;
     sequenceNodeHeartPack = monoBehaviour.Sequence().Repeat(-1, hearPackInterval, Send).Begin();
     MsgManager.Instance.Regist(MsgID.HearBeat, RecvHeartPack);
 }
示例#17
0
    private void CreateBehaviourTree()
    {
        behaviourTree = new BehaviourTreeEngine(false);

        rootSequence  = behaviourTree.CreateSequenceNode("Root", false);
        selectorDoor  = behaviourTree.CreateSelectorNode("Selector door");
        sequenceDoor  = behaviourTree.CreateSequenceNode("Sequence door", false);
        walkToDoor1   = behaviourTree.CreateLeafNode("Walk to door 1", WalkToDoor, ArriveToDoor);
        walkToDoor2   = behaviourTree.CreateLeafNode("Walk to door 2", WalkToDoor, ArriveToDoor);
        enterTheHouse = behaviourTree.CreateLeafNode("Enter the house", EnterTheHouse, HasEnteredTheHouse);
        openDoor1     = behaviourTree.CreateLeafNode("Open the door 1", OpenDoor, DoorOpened);
        openDoor2     = behaviourTree.CreateLeafNode("Open the door 2", OpenDoor, DoorOpened);
        unlockDoor    = behaviourTree.CreateLeafNode("Find key", UnlockDoor, IsTheDoorUnlocked);
        smashDoor     = behaviourTree.CreateLeafNode("Explode door", SmashDoor, DoorSmashed);

        rootSequence.AddChild(walkToDoor1);
        rootSequence.AddChild(selectorDoor);
        rootSequence.AddChild(enterTheHouse);

        selectorDoor.AddChild(openDoor1);
        selectorDoor.AddChild(sequenceDoor);
        selectorDoor.AddChild(smashDoor);

        sequenceDoor.AddChild(unlockDoor);
        sequenceDoor.AddChild(walkToDoor2);
        sequenceDoor.AddChild(openDoor2);

        behaviourTree.SetRootNode(rootSequence);
    }
示例#18
0
            public MockBehaviourTreeDFS() : base()
            {
                SequenceNode seq1 = new SequenceNode();
                SequenceNode seq2 = new SequenceNode();

                for (int i = 0; i < 4; i++)
                {
                    seq1.AddChild(Substitute.For <BTNode>());
                }

                for (int i = 0; i < 4; i++)
                {
                    seq2.AddChild(Substitute.For <BTNode>());
                }

                SequenceNode root = new SequenceNode(new List <BTNode> {
                    seq1, seq2
                });

                SetRoot(root);

                PerformDFS(x => {
                    if (x == seq1)
                    {
                        result = 1;
                    }
                    if (x == seq2)
                    {
                        result = 2;
                    }
                });
            }
示例#19
0
        private void ChangeFieldType(BaseNode node, BaseNode parent, int typeInd)
        {
            BaseNode newNode;

            switch (typeInd)
            {
            case 1:
                newNode = new SequenceNode(node.GetChildren(), node.GetId());
                break;

            case 2:
                newNode = new SelectorNode(node.GetChildren(), node.GetId());
                break;

            case 3:
                newNode = new TimeMonitorNode(node.GetChildren(), node.GetId());
                break;

            default:
                newNode = new ActionNode();
                newNode.SetId(node.GetId());
                break;
            }

            if (parent == null)
            {
                HintedExecutionBehaviourTree tree = (HintedExecutionBehaviourTree)target;
                tree.tree = newNode;
            }
            else
            {
                var changeIndex = parent.GetChildren().FindIndex(x => x == node);
                parent.GetChildren()[changeIndex] = newNode;
            }
        }
示例#20
0
        public void Behaviour_Tree_Visits_All_Childrens_On_Tick()
        {
            MockBTNode node = new MockBTNode();

            SequenceNode seq1 = new SequenceNode(new List <BTNode> {
                node, node, node
            });
            SequenceNode seq2 = new SequenceNode(new List <BTNode> {
                node, node, node
            });
            SequenceNode root = new SequenceNode(new List <BTNode> {
                seq1, seq2
            });

            BehaviourTree tree = new BehaviourTree(root);

            tree.Start();

            for (int i = 0; i < 6; i++)
            {
                tree.Update();
                if (i < 5)
                {
                    Assert.IsTrue(tree.TreeState == NodeState.Running);
                }
            }

            Assert.IsTrue(node.started == 6);
            Assert.IsTrue(tree.TreeState == NodeState.Success);
        }
示例#21
0
 public void Visit(SequenceNode node)
 {
     foreach (var s in node.Sequence)
     {
         s.Accept(this);
     }
 }
示例#22
0
        private Node GetCommaNode()
        {
            ResetPosition();

            var n      = new SequenceNode();
            var buffer = new List <Token>();

            do
            {
                if (ThisToken.Content == ",")
                {
                    n.Sequence.Add(GetAst(buffer));
                    buffer = new List <Token>();
                }
                else
                {
                    buffer.Add(ThisToken);
                }
            } while (NextToken());

            if (buffer.Count > 0)
            {
                n.Sequence.Add(GetAst(buffer));
            }

            return(n);
        }
示例#23
0
                public override GlobNode AddChar(char c)
                {
                    SequenceNode node = new SequenceNode(this);

                    _nodes.Add(node);
                    return(node.AddChar(c));
                }
示例#24
0
                public override GlobNode StartLevel()
                {
                    SequenceNode node = new SequenceNode(this);

                    _nodes.Add(node);
                    return(node.StartLevel());
                }
示例#25
0
                internal override GlobNode /*!*/ AddChar(char c)
                {
                    SequenceNode node = new SequenceNode(this);

                    _nodes.Add(node);
                    return(node.AddChar(c));
                }
示例#26
0
                internal override GlobNode /*!*/ StartLevel()
                {
                    SequenceNode node = new SequenceNode(this);

                    _nodes.Add(node);
                    return(node.StartLevel());
                }
示例#27
0
    public BehaviourTree()
    {
        finished = false;

        // Hard coding of the specific behaviour tree for a student
        // outlined in more detail in the provide diagram

        // intermediate nodes take a parent, action leaf nodes take in the type of action they are

        BNode root = new RepeaterNode(null);

        BNode getadvising = new SequenceNode(root);

        BNode branch = new SelectorNode(getadvising);

        BNode checkdata = new ActionNode(branch, Astar.Actiontype.CHECKDATA);

        BNode randomplaque = new SequenceNode(branch);
        BNode pathplaque   = new ActionNode(randomplaque, Astar.Actiontype.PATHPLAQUE);
        BNode checkplaque  = new ActionNode(randomplaque, Astar.Actiontype.CHECKPLAQUE);

        BNode pathprof3 = new ActionNode(getadvising, Astar.Actiontype.PATHPROF);
        BNode pickprof3 = new ActionNode(getadvising, Astar.Actiontype.PICKPROF);

        BNode randbranch = new RandSelectorNode(getadvising);
        BNode finish     = new ActionNode(randbranch, Astar.Actiontype.FINISH);
        BNode pathrand   = new ActionNode(randbranch, Astar.Actiontype.PATHRAND);

        // current is the node being looked at in the tree at any time
        current = root;
    }
示例#28
0
                internal override GlobNode AddChar(char c)
                {
                    var node = new SequenceNode(this);

                    nodes.Add(node);
                    return(node.AddChar(c));
                }
示例#29
0
        public static SequenceNode CreateRootNode(BBTag[] allowedTags)
        {
            var node = new SequenceNode();

            AddSubnodes(allowedTags, node);
            return(node);
        }
        protected override void OnDispose()
        {
            base.OnDispose();

            mSequenceNode.Dispose();
            mSequenceNode = null;
        }
示例#31
0
 public void ActivateTrigger(SequenceNode node) {
     if (node==sequenceNodes[sequencePosition]) {
         sequencePosition++;
         if (sequencePosition == sequenceLength) {
             isComplete = true;
             sequencePosition = 0; // what happens if you walk back?
             Debug.Log("Sequence completed!");
         }
     }
     else {
         Debug.Log("Wrong sequence trigger!");
         // tell playerControls to increase detection / set as unsafe
         if (ResetOnFail) {
             sequencePosition = 0;
         }
     }
 }
示例#32
0
 public override GlobNode StartLevel()
 {
     SequenceNode node = new SequenceNode(this);
     _nodes.Add(node);
     return node.StartLevel();
 }
示例#33
0
文件: Glob.cs 项目: atczyc/ironruby
 internal GlobUngrouper(int patternLength) {
     _rootNode = new SequenceNode(null);
     _currentNode = _rootNode;
     _level = 0;
 }
示例#34
0
文件: Glob.cs 项目: atczyc/ironruby
 internal override GlobNode/*!*/ AddChar(char c) {
     SequenceNode node = new SequenceNode(this);
     _nodes.Add(node);
     return node.AddChar(c);
 }
示例#35
0
文件: Glob.cs 项目: atczyc/ironruby
 internal override GlobNode/*!*/ StartLevel() {
     SequenceNode node = new SequenceNode(this);
     _nodes.Add(node);
     return node.StartLevel();
 }
示例#36
0
		private Node Parse()
		{
			Node n = ParseExpression();
			Token t = PeekToken();
			if (t == Token.Cut)
			{
				Expect(Token.Cut);
				Node n1 = new CutNode(positions.Count);
				positions.Add(n1);
				n = new SequenceNode(n, n1);
				n = new SequenceNode(n, ParseExpression());
			}
			return n;
		}
示例#37
0
 internal GlobUngrouper()
 {
     rootNode = new SequenceNode(null);
     currentNode = rootNode;
     level = 0;
 }
示例#38
0
 internal override GlobNode StartLevel()
 {
     var node = new SequenceNode(this);
     nodes.Add(node);
     return node.StartLevel();
 }
示例#39
0
		private Node ParseSequence()
		{
			Node n1 = ParseTerm();
			for (;;)
			{
				Token t = PeekToken(); 
				switch (t)
				{
				case Token.End:
				case Token.Or:
				case Token.RParen:
				case Token.Cut:
					return n1;
				default:
					n1 = new SequenceNode(n1, ParseTerm());
					break;
				}
			}
		}
示例#40
0
 public GlobUngrouper()
 {
     _rootNode = new SequenceNode(null);
     _currentNode = _rootNode;
     _level = 0;
 }
示例#41
0
 internal override GlobNode AddChar(char c)
 {
     var node = new SequenceNode(this);
     nodes.Add(node);
     return node.AddChar(c);
 }
示例#42
0
		public Regexp Build()
		{
			Node n = Parse();
			Node acc = new AcceptNode(positions.Count);
			positions.Add(acc);
			n = new SequenceNode(n, acc);

			n.ComputeNullable();
			n.ComputeFirstPos(this);
			n.ComputeLastPos(this);
			n.ComputeFollowPos(this);

#if DEBUG
			StringBuilder sb = new StringBuilder();
			n.Dump(sb);
			Debug.WriteLine(sb.ToString());
#endif
			State [] states = BuildDfaTable(n);
			TableCompacter tc = new TableCompacter(states, charClasses);
			tc.Compact();
			return new Regexp(alphabet, tc.ReStates, tc.Next, tc.Check);
		}
示例#43
0
 /// <summary>
 /// clone
 /// </summary>
 /// <returns></returns>
 public IBehaviourNode Clone()
 {
     var behaviourNode = new SequenceNode();
     base.CopyToCompositeNode(behaviourNode);
     return behaviourNode;
 }
示例#44
0
 public override GlobNode AddChar(char c)
 {
     SequenceNode node = new SequenceNode(this);
     _nodes.Add(node);
     return node.AddChar(c);
 }