public void TestActionsInScript() { // make some actions var a = new TestAction("a"); var b = new TestAction("b"); var c = new TestAction("c"); var d = new TestAction("d"); var e = new TestAction("e"); var f = new TestAction("f"); var seq = new TestScript("test"); seq.Enqueue(new List <Action>() { a, b, c }); // make sure they're all enqueued but only A is activated Assert.IsTrue(!seq.IsEmpty && seq.Head == a); Assert.IsTrue(a.IsEnqueued && a.IsActive); Assert.IsTrue(b.IsEnqueued && !b.IsActive); Assert.IsTrue(c.IsEnqueued && !c.IsActive); // stop A, this should dequeue it and activate B a.Stop(true); Assert.IsTrue(!seq.IsEmpty && seq.Head == b); Assert.IsTrue(!a.IsEnqueued && !a.IsActive); Assert.IsTrue(b.IsEnqueued && b.IsActive); Assert.IsTrue(c.IsEnqueued && !c.IsActive); // stop the script, this should pop B and C without activating the latter seq.Clear(); Assert.IsTrue(seq.IsEmpty && seq.Head == null); Assert.IsTrue(!a.IsEnqueued && !a.IsActive && a.countActivate == 1 && a.countDeactivate == 1); Assert.IsTrue(!b.IsEnqueued && !b.IsActive && b.countActivate == 1 && b.countDeactivate == 1); Assert.IsTrue(!c.IsEnqueued && !c.IsActive && c.countActivate == 0 && c.countDeactivate == 0); // push two more seq.Enqueue(new List <Action>() { d, e }); Assert.IsTrue(d.IsEnqueued && d.IsActive && d.countActivate == 1 && d.countDeactivate == 0); Assert.IsTrue(e.IsEnqueued && !e.IsActive && e.countActivate == 0 && e.countDeactivate == 0); // pop E from the end, this should not affect D, or activate/deactivate E seq.PopTail(); Assert.IsTrue(d.IsEnqueued && d.IsActive && d.countActivate == 1 && d.countDeactivate == 0); Assert.IsTrue(!e.IsEnqueued && !e.IsActive && e.countActivate == 0 && e.countDeactivate == 0); // push F to the front, this should deactivate D but keep it in the queue seq.PushHead(f); Assert.IsTrue(f.IsEnqueued && f.IsActive && f.countActivate == 1 && f.countDeactivate == 0); Assert.IsTrue(d.IsEnqueued && !d.IsActive && d.countActivate == 1 && d.countDeactivate == 1); // now dequeue F from the front, this should pop it, and re-activate D seq.StopCurrentAction(true, null); Assert.IsTrue(!f.IsEnqueued && !f.IsActive && f.countActivate == 1 && f.countDeactivate == 1); Assert.IsTrue(d.IsEnqueued && d.IsActive && d.countActivate == 2 && d.countDeactivate == 1); }
public void TestActionsInScript() { // make some actions var a = new TestAction("a"); var b = new TestAction("b"); var c = new TestAction("c"); var d = new TestAction("d"); var e = new TestAction("e"); var f = new TestAction("f"); var seq = new TestScript("test"); seq.Enqueue(new List<Action>() { a, b, c }); // make sure they're all enqueued but only A is activated Assert.IsTrue(!seq.IsEmpty && seq.Head == a); Assert.IsTrue(a.IsEnqueued && a.IsActive); Assert.IsTrue(b.IsEnqueued && !b.IsActive); Assert.IsTrue(c.IsEnqueued && !c.IsActive); // stop A, this should dequeue it and activate B a.Stop(true); Assert.IsTrue(!seq.IsEmpty && seq.Head == b); Assert.IsTrue(!a.IsEnqueued && !a.IsActive); Assert.IsTrue( b.IsEnqueued && b.IsActive); Assert.IsTrue( c.IsEnqueued && !c.IsActive); // stop the script, this should pop B and C without activating the latter seq.Clear(); Assert.IsTrue(seq.IsEmpty && seq.Head == null); Assert.IsTrue(!a.IsEnqueued && !a.IsActive && a.countActivate == 1 && a.countDeactivate == 1); Assert.IsTrue(!b.IsEnqueued && !b.IsActive && b.countActivate == 1 && b.countDeactivate == 1); Assert.IsTrue(!c.IsEnqueued && !c.IsActive && c.countActivate == 0 && c.countDeactivate == 0); // push two more seq.Enqueue(new List<Action>() { d, e }); Assert.IsTrue(d.IsEnqueued && d.IsActive && d.countActivate == 1 && d.countDeactivate == 0); Assert.IsTrue(e.IsEnqueued && !e.IsActive && e.countActivate == 0 && e.countDeactivate == 0); // pop E from the end, this should not affect D, or activate/deactivate E seq.PopTail(); Assert.IsTrue( d.IsEnqueued && d.IsActive && d.countActivate == 1 && d.countDeactivate == 0); Assert.IsTrue(!e.IsEnqueued && !e.IsActive && e.countActivate == 0 && e.countDeactivate == 0); // push F to the front, this should deactivate D but keep it in the queue seq.PushHead(f); Assert.IsTrue(f.IsEnqueued && f.IsActive && f.countActivate == 1 && f.countDeactivate == 0); Assert.IsTrue(d.IsEnqueued && !d.IsActive && d.countActivate == 1 && d.countDeactivate == 1); // now dequeue F from the front, this should pop it, and re-activate D seq.StopCurrentAction(true, null); Assert.IsTrue(!f.IsEnqueued && !f.IsActive && f.countActivate == 1 && f.countDeactivate == 1); Assert.IsTrue( d.IsEnqueued && d.IsActive && d.countActivate == 2 && d.countDeactivate == 1); }