public void TestRunning() { var root = new BehaviorNode(this); var t1 = new BehaviorNode(); var c1 = new TestConditionBehaviorNode(false); var c11 = new TestTimedBehaviorNode(); var c12 = new BehaviorNode(); root.AddChild(t1); t1.AddChild(c1); Assert.AreEqual(c1.owner, t1.owner); c1.evaluate = true; c1.AddChild(c11); c1.AddChild(c12); Assert.AreEqual(root, t1.RootNode); Assert.AreEqual(root, c1.RootNode); Assert.AreEqual(root, c11.RootNode); Assert.AreEqual(root, c12.RootNode); t1.Run(); Assert.IsTrue(t1.IsRunning); Assert.IsTrue(c1.IsRunning); Assert.IsTrue(c11.IsRunning); Assert.IsFalse(c12.IsRunning); t1.OnUpdate(new TimeSlice(1.0f)); Assert.IsFalse(t1.IsRunning); Assert.IsFalse(c1.IsRunning); Assert.IsFalse(c11.IsRunning); }
public void TestSequenceBehavior_NotRepeatingFalseTrueFinish() { var t1 = new SequenceBehaviorNode(false); var c1 = new TestConditionBehaviorNode(false); var c2 = new TestConditionBehaviorNode(true); t1.AddChild(c1); t1.AddChild(c2); // Condition nodes must have a child for success c1.AddChild(new TestSuccessNode()); c2.AddChild(new TestSuccessNode()); // False evaluation node is skipped, true evaluation node is run t1.Run(); Assert.AreEqual(1, c1.runCount); Assert.AreEqual(1, c2.runCount); Assert.IsFalse(t1.IsRunning); Assert.IsFalse(c1.IsRunning); Assert.IsFalse(c2.IsRunning); Assert.AreEqual(BehaviorNode.StateType.Fail, c1.State); Assert.AreEqual(BehaviorNode.StateType.Success, t1.State); Assert.AreEqual(BehaviorNode.StateType.Success, c2.State); }
public void TestSequenceBehavior_RepeatingFalseTrueTrue() { var t1 = new SequenceBehaviorNode(true); var c1 = new TestConditionBehaviorNode(false); var c2 = new TestConditionBehaviorNode(true); var c3 = new TestConditionBehaviorNode(true); t1.AddChild(c1); t1.AddChild(c2); t1.AddChild(c3); c1.AddChild(new TestSuccessNode()); c2.AddChild(new TestSuccessNode()); c3.AddChild(new TestSuccessNode()); t1.Run(); Assert.AreEqual(1, c1.runCount); Assert.AreEqual(1, c2.runCount); Assert.AreEqual(0, c3.runCount); Assert.IsFalse(t1.IsRunning); Assert.IsFalse(c1.IsRunning); Assert.IsFalse(c2.IsRunning); Assert.AreEqual(BehaviorNode.StateType.Fail, c1.State); Assert.AreEqual(BehaviorNode.StateType.Success, t1.State); Assert.AreEqual(BehaviorNode.StateType.Success, c2.State); t1.Run(); Assert.AreEqual(1, c1.runCount); Assert.AreEqual(1, c2.runCount); Assert.AreEqual(1, c3.runCount); Assert.IsFalse(t1.IsRunning); Assert.IsFalse(c1.IsRunning); Assert.IsFalse(c2.IsRunning); Assert.IsFalse(c3.IsRunning); Assert.AreEqual(BehaviorNode.StateType.Fail, c1.State); Assert.AreEqual(BehaviorNode.StateType.Success, t1.State); Assert.AreEqual(BehaviorNode.StateType.Success, c3.State); // Test repeat (should succeed, repeat is turned on) t1.Run(); Assert.AreEqual(2, c1.runCount); Assert.AreEqual(2, c2.runCount); Assert.AreEqual(1, c3.runCount); Assert.IsFalse(t1.IsRunning); Assert.IsFalse(c1.IsRunning); Assert.IsFalse(c2.IsRunning); Assert.IsFalse(c3.IsRunning); Assert.AreEqual(BehaviorNode.StateType.Fail, c1.State); Assert.AreEqual(BehaviorNode.StateType.Success, t1.State); Assert.AreEqual(BehaviorNode.StateType.Success, c2.State); }
public void TestConditionBehaviorNode_FailChild() { var t1 = new BehaviorNode(); var c1 = new TestConditionBehaviorNode(true); t1.AddChild(c1); // Condition evaluates to true, with fail child -> Fail c1.AddChild(new TestFailNode()); t1.Run(); Assert.AreEqual(BehaviorNode.StateType.Fail, c1.State); }
public void TestSelectorBehavior() { var t1 = new SelectorBehaviorNode(); var c1 = new TestConditionBehaviorNode(false); var c2 = new TestConditionBehaviorNode(true); var c3 = new TestConditionBehaviorNode(true); t1.AddChild(c1); t1.AddChild(c2); t1.AddChild(c3); // Condition nodes must have a child for success c1.AddChild(new TestSuccessNode()); c2.AddChild(new TestSuccessNode()); c3.AddChild(new TestSuccessNode()); t1.Run(); Assert.AreEqual(1, c1.runCount); Assert.AreEqual(1, c2.runCount); Assert.AreEqual(0, c3.runCount); Assert.IsFalse(c1.IsRunning); Assert.IsFalse(c2.IsRunning); Assert.AreEqual(BehaviorNode.StateType.Success, t1.State); Assert.AreEqual(BehaviorNode.StateType.Fail, c1.State); Assert.AreEqual(BehaviorNode.StateType.Success, c2.State); t1.Run(); Assert.AreEqual(2, c1.runCount); Assert.AreEqual(2, c2.runCount); Assert.AreEqual(0, c3.runCount); Assert.IsFalse(c1.IsRunning); Assert.IsFalse(c2.IsRunning); Assert.AreEqual(BehaviorNode.StateType.Success, t1.State); Assert.AreEqual(BehaviorNode.StateType.Fail, c1.State); Assert.AreEqual(BehaviorNode.StateType.Success, c2.State); c2.evaluate = false; t1.Run(); Assert.AreEqual(3, c1.runCount); Assert.AreEqual(3, c2.runCount); Assert.AreEqual(1, c3.runCount); Assert.IsFalse(c1.IsRunning); Assert.IsFalse(c2.IsRunning); Assert.AreEqual(BehaviorNode.StateType.Success, t1.State); Assert.AreEqual(BehaviorNode.StateType.Fail, c1.State); Assert.AreEqual(BehaviorNode.StateType.Fail, c2.State); Assert.AreEqual(BehaviorNode.StateType.Success, c3.State); }
public void TestConditionBehaviorNode_SuccessChild() { var t1 = new BehaviorNode(); var c1 = new TestConditionBehaviorNode(false); t1.AddChild(c1); Assert.AreEqual(c1.owner, t1.owner); // Condition evaluates to false -> Fail t1.Run(); Assert.AreEqual(BehaviorNode.StateType.Fail, c1.State); // Condition evaluates to true, but no children -> Fail c1.evaluate = true; t1.Run(); Assert.AreEqual(BehaviorNode.StateType.Fail, c1.State); // Condition evaluates to true, with success child -> Success c1.AddChild(new TestSuccessNode()); t1.Run(); Assert.AreEqual(BehaviorNode.StateType.Success, c1.State); }