Exemplo n.º 1
0
        public void ChoiceTerminatesPause()
        {
            var rumor = new Rumor.Engine.Rumor(new List <Node>()
            {
                new Choice("1", new List <Node>()
                {
                    new Return()
                }),
                new Pause(60, false),
            });

            var yield = rumor.Start();

            yield.MoveNext();             // Start the pause
            rumor.Choose(0);
            yield.MoveNext();             // Update the state
            Assert.AreEqual(true, rumor.Finished);
        }
Exemplo n.º 2
0
        public void JumpDefined()
        {
            var rumor = new Rumor.Engine.Rumor(new List <Node>()
            {
                new Jump("a"),
                new Label("b", null),
                new Say("b"),
                new Label("a", null),
                new Say("a"),
                new Jump("b"),
            });

            var yield = rumor.Start();

            yield.MoveNext();
            Assert.AreEqual("a", (rumor.Current as Say).EvaluateText(rumor));

            rumor.Advance();
            yield.MoveNext();
            Assert.AreEqual("b", (rumor.Current as Say).EvaluateText(rumor));
        }
Exemplo n.º 3
0
        public void CallDefined()
        {
            var rumor = new Rumor.Engine.Rumor(new List <Node>()
            {
                new Call("a"),
                new Label("b", new List <Node>()
                {
                    new Say("b"),
                    new Return(),
                }),
                new Label("a", new List <Node>()
                {
                    new Say("a"),
                }),
                new Call("b"),
            });

            var yield = rumor.Start();

            yield.MoveNext();
            Assert.AreEqual("a", (rumor.Current as Say).EvaluateText(rumor));

            rumor.Advance();
            yield.MoveNext();
            Assert.AreEqual("b", (rumor.Current as Say).EvaluateText(rumor));

            rumor.Advance();
            yield.MoveNext();
            Assert.AreEqual("a", (rumor.Current as Say).EvaluateText(rumor));

            rumor.Advance();
            yield.MoveNext();
            Assert.AreEqual("b", (rumor.Current as Say).EvaluateText(rumor));

            rumor.Advance();
            yield.MoveNext();
            Assert.True(rumor.Started);
            Assert.True(rumor.Finished);
        }
Exemplo n.º 4
0
        public void ReturnInCall()
        {
            var rumor = new Rumor.Engine.Rumor(new List <Node>()
            {
                new Jump("start"),
                new Label("foo", new List <Node>()
                {
                    new Say("Something to prevent infinite loop"),
                    new Return()
                }),
                new Label("start", new List <Node>()
                {
                    new Call("foo")
                }),
            });

            var yield = rumor.Start();

            yield.MoveNext();
            rumor.Advance();
            yield.MoveNext();
            Assert.IsTrue(rumor.Finished);
        }
Exemplo n.º 5
0
        public void CallMultipleDefinedDifferentScope()
        {
            var rumor = new Rumor.Engine.Rumor(new List <Node>()
            {
                new Label("a", new List <Node>()
                {
                    new Say("a"),

                    new Label("a", new List <Node>()
                    {
                        new Say("aa"),
                    }),
                    new Label("b", new List <Node>()
                    {
                        new Say("ab"),
                        new Call("a"),
                    }),
                }),
            });

            var yield = rumor.Start();

            yield.MoveNext();
            Assert.AreEqual("a", (rumor.Current as Say).EvaluateText(rumor));

            rumor.Advance();
            yield.MoveNext();
            Assert.AreEqual("aa", (rumor.Current as Say).EvaluateText(rumor));

            rumor.Advance();
            yield.MoveNext();
            Assert.AreEqual("ab", (rumor.Current as Say).EvaluateText(rumor));

            rumor.Advance();
            yield.MoveNext();
            Assert.AreEqual("aa", (rumor.Current as Say).EvaluateText(rumor));
        }
Exemplo n.º 6
0
        public void RumorJumpWithoutStart()
        {
            var rumor = new Rumor.Engine.Rumor(new List <Node>()
            {
                new Say("a"),
                new Label("test", new List <Node> ()
                {
                    new Say("b"),
                }),
            });

            Assert.DoesNotThrow(() => rumor.JumpToLabel("test"));
            Assert.IsFalse(rumor.Started);
            Assert.IsFalse(rumor.Running);
            Assert.IsFalse(rumor.Finished);

            var yield = rumor.Start();

            yield.MoveNext();
            Assert.AreEqual("b", (rumor.Current as Say).EvaluateText(rumor));
            Assert.IsTrue(rumor.Started);
            Assert.IsTrue(rumor.Running);
            Assert.IsFalse(rumor.Finished);
        }
Exemplo n.º 7
0
        public void SerializeRumorStateChoice()
        {
            var rumor = new Rumor.Engine.Rumor("return");
            var a     = new RumorState();

            a.AddChoice("choice", new List <Node>()
            {
                new Say("say"),
            });

            var b = Reserialize(a);

            Assert.AreEqual(1, a.Choices.Count);
            Assert.AreEqual(a.Choices.Count, b.Choices.Count);
            Assert.AreEqual(a.Choices[0], b.Choices[0]);

            Assert.AreEqual(1, a.Consequences.Count);
            Assert.AreEqual(a.Consequences.Count, b.Consequences.Count);
            Assert.AreEqual(1, a.Consequences[0].Count);
            Assert.AreEqual(a.Consequences[0].Count, b.Consequences[0].Count);
            Assert.AreEqual(
                (a.Consequences[0][0] as Say).EvaluateText(rumor),
                (b.Consequences[0][0] as Say).EvaluateText(rumor));
        }
Exemplo n.º 8
0
        public void CallDoesntClearState()
        {
            var rumor = new Rumor.Engine.Rumor(new List <Node>()
            {
                new Say("foo"),
                new Call("a"),
                new Add("foo"),
                new Label("a", new List <Node>()
                {
                    new Add("bar"),
                    new Return(),
                }),
                new Add("baz"),
            });

            var yield = rumor.Start();

            yield.MoveNext();
            Assert.AreEqual("foo", rumor.State.Dialog[null]);

            rumor.Advance();
            yield.MoveNext();
            Assert.AreEqual("foo bar", rumor.State.Dialog[null]);

            rumor.Advance();
            yield.MoveNext();
            Assert.AreEqual("foo bar foo", rumor.State.Dialog[null]);

            rumor.Advance();
            yield.MoveNext();
            Assert.AreEqual("foo bar foo bar", rumor.State.Dialog[null]);

            rumor.Advance();
            yield.MoveNext();
            Assert.AreEqual("foo bar foo bar baz", rumor.State.Dialog[null]);
        }