Esempio n. 1
0
        public void FillTimeTable()
        {
            WorldCoordinate positionA = new WorldCoordinate("Eden", new IntPoint(2, 3));
            WorldCoordinate positionB = new WorldCoordinate("Eden", new IntPoint(4, 1));
            WorldCoordinate positionC = new WorldCoordinate("Eden", new IntPoint(1, 2));

            Timetable timetable = _world.timetableRunner.CreateTimetable("NewTimetable", "");

            timetable.CreateTimetableSpanInternal(new GameTime(03, 00), new GameTime(08, 00), new Behaviour_BeAtPosition(positionA));
            timetable.CreateTimetableSpanInternal(new GameTime(08, 00), new GameTime(21, 00), new Behaviour_BeAtPosition(positionB));
            timetable.CreateTimetableSpanInternal(new GameTime(21, 00), new GameTime(03, 00), new Behaviour_BeAtPosition(positionC));

            Console.WriteLine("TimetableSpans: \n" + timetable.TimetableSpansToString());

            _eva.timetableName = "NewTimetable";
            _eva.logger.AddListener(Console.WriteLine);

            WorldTestHelper.UpdateWorldUntilGameTime(_world, new GameTime(1, 05, 00, 00));
            Assert.AreEqual(positionA, _eva.position);

            WorldTestHelper.UpdateWorldUntilGameTime(_world, new GameTime(1, 12, 00, 00));
            Assert.AreEqual(positionB, _eva.position);

            WorldTestHelper.UpdateWorldUntilGameTime(_world, new GameTime(2, 02, 00, 00));
            Assert.AreEqual(positionC, _eva.position);
        }
        public void SendDataFromComputerToComputer()
        {
            D.onDLog += Console.WriteLine;

            Computer sender   = _world.tingRunner.CreateTing <Computer>("Sender", new WorldCoordinate("Eden", 1, 3));
            Computer receiver = _world.tingRunner.CreateTing <Computer>("Receiver", new WorldCoordinate("Eden", 3, 2));

            sender.hasInternetAPI = true;

            sender.masterProgramName   = "Sender";
            receiver.masterProgramName = "Receiver";

            receiver.RunProgram(null);
            sender.RunProgram(null);

            WorldTestHelper.UpdateWorld(_world, 1f);

            /*
             * Console.WriteLine("Output in sender:");
             * PrintOutput(sender);
             *
             * Console.WriteLine("Output in receiver:");
             * PrintOutput(receiver);
             */

            Console.WriteLine("Errors in sender:");
            PrintErrors(sender.masterProgram);

            Console.WriteLine("Errors in receiver:");
            PrintErrors(receiver.masterProgram);

            //Assert.AreEqual(1, receiver.consoleOutput.Length);
            Assert.AreEqual("received: hej", receiver.consoleOutput[0]);
        }
        public void InteractWithMysticalCubeToRunItsProgram()
        {
            const string saveName = "InteractWithMysticalCubeToRunItsProgram.json";
            {
                MysticalCube cube = _world.tingRunner.CreateTing <MysticalCube>("The Cube", testDefaultCoordinate);
                Assert.AreEqual(0, cube.programs.Length);
                Assert.AreEqual(0, cube.mysteryLevel);

                Character bosse = _world.tingRunner.CreateTing <Character>("Bosse", testDefaultCoordinate);
                bosse.InteractWith(cube);
                WorldTestHelper.UpdateWorld(_world, 5f);

                Assert.AreEqual(5, cube.mysteryLevel);                 // uses the default "TheCube.sprak" program
                _world.Save(saveName);
            }
            {
                _world = new World(saveName);

                MysticalCube cube = _world.tingRunner.GetTing("The Cube") as MysticalCube;
                Assert.AreEqual(5, cube.mysteryLevel);

                Character bosse = _world.tingRunner.GetTing("Bosse") as Character;
                bosse.InteractWith(cube);

                WorldTestHelper.UpdateWorld(_world, 5f);
                Assert.AreEqual(10, cube.mysteryLevel);
            }
        }
Esempio n. 4
0
        public void SleepDrinkAndSitBehaviours()
        {
            _eva.logger.AddListener(Console.WriteLine);
            _eva.timetableName = "Timetable2";
            _eva.sleepiness    = 100.0f;

            WorldCoordinate positionA = new WorldCoordinate("Eden", new IntPoint(1, 1));
            WorldCoordinate positionB = new WorldCoordinate("Eden", new IntPoint(4, 2));
            WorldCoordinate positionC = new WorldCoordinate("Eden", new IntPoint(3, 3));

            _world.tingRunner.CreateTing <Bed>("Bed1", positionA);
            Drink drink = _world.tingRunner.CreateTing <Drink>("Drink1", positionB);

            drink.amount = 100f;

            _world.tingRunner.CreateTing <Seat>("Chair1", positionC);

            WorldTestHelper.UpdateWorldUntilGameTime(_world, new GameTime(0, 21, 00, 00));
            Assert.AreEqual("Sleeping", _eva.actionName);

            WorldTestHelper.UpdateWorldUntilGameTime(_world, new GameTime(1, 10, 00, 00));
            Assert.AreEqual(_eva.position, drink.position);

            WorldTestHelper.UpdateWorldUntilGameTime(_world, new GameTime(1, 19, 00, 00));
            Console.WriteLine("Time: " + _world.settings.gameTimeClock);
            Assert.IsNull(_eva.bed);

            _eva.sleepiness = 200f;

            WorldTestHelper.UpdateWorldUntilGameTime(_world, new GameTime(2, 21, 00, 00));
            Assert.AreEqual("Sleeping", _eva.actionName);
            Assert.IsNull(_eva.seat);
        }
        public void CallTransactionFunctionOnCreditCardTest()
        {
            var lines = new List <string>();

            CreditCard card = _world.tingRunner.CreateTing <CreditCard> ("Visa", testDefaultCoordinate);

            //card.logger.AddListener (o => Console.WriteLine ("Card log: " + o));
            card.AddDataListener("dialogueLine", (string oldValue, string newValue) => {
                lines.Add(newValue);
                Console.WriteLine("Card said: " + newValue);
            });
            card.masterProgramName = "EvasCard";

            Computer financeComputer = _world.tingRunner.CreateTing <Computer>("FinanceComputer", testDefaultCoordinate);

            financeComputer.masterProgramName = "FinanceComputer";
            financeComputer.hasMemoryAPI      = true;
            financeComputer.masterProgram.Start();

            WorldTestHelper.UpdateWorld(_world, 3f);
            card.RunMakeTransactionFunction(-3.5f);
            WorldTestHelper.UpdateWorld(_world, 3f);

            Assert.AreEqual(1, lines.Count);
            Assert.AreEqual("Will make transaction: -3.5", lines[0]);

            Assert.AreEqual(false, card.containsBrokenPrograms);
            Assert.AreEqual(false, financeComputer.containsBrokenPrograms);
        }
        public void CallNonexistingFunction()
        {
            Computer computer7 = _world.tingRunner.CreateTing <Computer> ("Computer7", testDefaultCoordinate);
            Computer computer8 = _world.tingRunner.CreateTing <Computer> ("Computer8", testDefaultCoordinate);

            computer7.masterProgramName = "Computer7";
            computer8.masterProgramName = "BlankSlate";

            computer7.logger.AddListener(s => Console.WriteLine("Computer7: " + s));

            //Console.WriteLine ("\n\nAsserting programs");
            D.isNull(computer7.masterProgram, "master program is null");
            D.isNull(computer7.floppyBootProgram, "floppy boot program is null");

            //Console.WriteLine ("\n\nPrograms count: " + computer7.programs.Length);
//			foreach (var prog in computer7.programs) {
//				Console.WriteLine (" -" + prog.name + ": " + prog.sourceCodeName);
//			}

            computer7.RunProgram(null);
            WorldTestHelper.UpdateWorld(_world, 1f);

            Assert.AreEqual(true, computer7.containsBrokenPrograms);
            PrintErrors(computer7.masterProgram);

            Assert.AreEqual(false, computer8.containsBrokenPrograms);
            PrintErrors(computer8.masterProgram);
        }
Esempio n. 7
0
        public void MoveMysticalCube()
        {
            D.onDLog += Console.WriteLine;
            SmartWalkBehaviour.s_logger.AddListener(Console.WriteLine);
            _eva.logger.AddListener(Console.WriteLine);

            _eva.position  = new WorldCoordinate("Kitchen", new IntPoint(0, 0));
            _cube.position = new WorldCoordinate("Kitchen", new IntPoint(8, 0));

            // First, go and pick up the cube
            _eva.WalkToTingAndInteract(_cube);
            WorldTestHelper.UpdateWorld(_world, 15f);
            Assert.AreEqual(_cube, _eva.handItem);
            Assert.AreEqual(new IntPoint(7, 0), _eva.localPoint);
            Assert.AreEqual(Direction.RIGHT, _eva.direction);

            // Then walk over to the left side again
            _eva.WalkTo(new WorldCoordinate("Kitchen", new IntPoint(1, 0)));
            WorldTestHelper.UpdateWorld(_world, 15f);
            Assert.AreEqual(new IntPoint(1, 0), _eva.localPoint);
            Assert.AreEqual(Direction.LEFT, _eva.direction);

            // Drop the cube
            _eva.DropHandItem();
            WorldTestHelper.UpdateWorld(_world, 3f);
            Assert.AreEqual(null, _eva.handItem);
            Assert.AreEqual(new IntPoint(0, 0), _cube.localPoint);
        }
        public void DontUseVoidRemoteFnCallOnVoidFn()
        {
            D.onDLog += Console.WriteLine;

            Computer sender   = _world.tingRunner.CreateTing <Computer>("Sender", new WorldCoordinate("Eden", 1, 3));
            Computer receiver = _world.tingRunner.CreateTing <Computer>("Receiver", new WorldCoordinate("Eden", 3, 2));

            sender.hasInternetAPI = true;

            sender.masterProgramName   = "Sender3";
            receiver.masterProgramName = "Receiver3";

            receiver.RunProgram(null);
            sender.RunProgram(null);

            WorldTestHelper.UpdateWorld(_world, 1f);

            Console.WriteLine("Errors in sender:");
            PrintErrors(sender.masterProgram);

            Console.WriteLine("Errors in receiver:");
            PrintErrors(receiver.masterProgram);

            //Assert.AreEqual(1, receiver.consoleOutput.Length);
            Assert.AreEqual("received: svejs", receiver.consoleOutput[0]);
        }
        public void CreateDrinksAutomaticallyButWithLimit()
        {
            D.onDLog += Console.WriteLine;

            Character lisa = _world.tingRunner.CreateTing <Character>("Lisa", new WorldCoordinate(TEST_ROOM, IntPoint.Zero));

            WorldTestHelper.UpdateWorld(_world, 3f);

            Drink lastDrink = null;

            for (int i = 0; i < 100; i++)
            {
                lastDrink = Behaviour_Sell.CreateTingToSell(lisa, _world.tingRunner, "WellspringSoda", _world.settings) as Drink;
            }

            WorldTestHelper.UpdateWorld(_world, 3f);

            Assert.AreEqual(21, _world.tingRunner.GetTingsOfType <Drink>().Length);

            lisa.handItem = lastDrink;

            for (int i = 0; i < 100; i++)
            {
                Behaviour_Sell.CreateTingToSell(lisa, _world.tingRunner, "WellspringSoda", _world.settings);
            }

            WorldTestHelper.UpdateWorld(_world, 3f);

            Assert.AreEqual(25, _world.tingRunner.GetTingsOfType <Drink>().Length);            // creates one extra drink each time the one Lisa holds is found when trying to create _sale_ drink
        }
        public void CharacterUsesKeyOnDoor()
        {
            Character sune  = _world.tingRunner.CreateTing <Character>("Sune", new WorldCoordinate(TEST_ROOM, IntPoint.Zero));
            Door      door1 = _world.tingRunner.CreateTing <Door>("Door1", new WorldCoordinate(TEST_ROOM, IntPoint.Zero));
            Door      door2 = _world.tingRunner.CreateTing <Door>("Door2", new WorldCoordinate(TEST_ROOM, new IntPoint(2, 2)));

            door1.targetDoorName = "Door2";
            door2.targetDoorName = "Door1";
            Key key = _world.tingRunner.CreateTing <Key>("Key", new WorldCoordinate(TEST_ROOM, IntPoint.Zero));

            Assert.IsTrue(sune.CanInteractWith(door1));

            sune.InteractWith(door1);
            Assert.AreEqual("WalkingThroughDoor", sune.actionName);

            sune.StopAction();
            Assert.AreEqual("", sune.actionName);

            sune.PickUp(key);
            Assert.IsNull(sune.handItem);
            Assert.AreEqual("PickingUp", sune.actionName);

            WorldTestHelper.UpdateWorld(_world, 2.0f);
            Assert.IsNotNull(sune.handItem);
            Assert.AreEqual("Key", sune.handItem.name);

            sune.UseHandItemToInteractWith(door1);
            Assert.AreEqual("UsingDoorWithKey", sune.actionName);

            WorldTestHelper.UpdateWorld(_world, 2.0f);
            Assert.AreEqual("", sune.actionName);
        }
        public void SetUp()
        {
            WorldTestHelper.GenerateInitData();
            InitialSaveFileCreator i = new InitialSaveFileCreator();

            _world = new World(i.CreateRelay(WorldTestHelper.INIT_DATA_PATH));
        }
Esempio n. 12
0
        public void ProblemsWithWaitCommand()
        {
            _world.dialogueRunner.AddOnSomeoneSaidSomethingListener(o => {
                Console.WriteLine(o.speaker + ": " + o.line);
            });

            var key = _world.tingRunner.CreateTing <Key>("Key", _adam.position);
            var bo  = _world.tingRunner.CreateTing <Character>("Bo", _adam.position);

            bo.handItem = key;

            bo.logger.AddListener(Console.WriteLine);

            bo.SetTimetableRunner(_world.timetableRunner);
            bo.timetableName  = "Bo";
            bo.timetableTimer = 0.5f;

            WorldTestHelper.UpdateWorld(_world, 1.0f);

            _world.dialogueRunner.StartConversation("ProblemWithTiming");
            WorldTestHelper.UpdateWorld(_world, 1.0f);

            Assert.AreEqual("A", bo.dialogueLine);
            Assert.AreEqual("Key", bo.handItemName);

            bo.timetableTimer = 0.5f;
            WorldTestHelper.UpdateWorld(_world, 1.0f);
            bo.timetableTimer = 0.5f;
            WorldTestHelper.UpdateWorld(_world, 1.0f);

            Assert.AreEqual("", bo.handItemName);
            Assert.AreEqual("B", bo.dialogueLine);
        }
Esempio n. 13
0
        public void Setup()
        {
            D.onDLog += Console.WriteLine;
            SmartWalkBehaviour.s_logger.AddListener(s => Console.WriteLine("Walk behaviour: " + s));

            WorldTestHelper.GenerateInitData();
            InitialSaveFileCreator i = new InitialSaveFileCreator();

            _world = new World(i.CreateRelay("../InitData1/"));
            foreach (string s in _world.Preload())
            {
                ;
            }

            _d1 = _world.tingRunner.CreateTing <Door>("DoorOne", new TingTing.WorldCoordinate("Eden", new IntPoint(4, 4)), Direction.LEFT);
            _d2 = _world.tingRunner.CreateTing <Door>("DoorTwo", new TingTing.WorldCoordinate("Hallway", new IntPoint(0, 0)), Direction.RIGHT);
            _d1.targetDoorName = _d2.name;
            _d2.targetDoorName = _d1.name;

            _d3 = _world.tingRunner.CreateTing <Door>("DoorThree", new TingTing.WorldCoordinate("Hallway", new IntPoint(4, 2)), Direction.LEFT);
            _d4 = _world.tingRunner.CreateTing <Door>("DoorFour", new TingTing.WorldCoordinate("Kitchen", new IntPoint(0, 2)), Direction.RIGHT);
            _d3.targetDoorName = _d4.name;
            _d4.targetDoorName = _d3.name;

            _world.roomRunner.GetRoom("Hallway").worldPosition = new IntPoint(4, 4);
            _adam = _world.tingRunner.GetTing <Character>("Adam");
            _eve  = _world.tingRunner.GetTing <Character>("Eva");
        }
Esempio n. 14
0
        public void WalkThroughSeveralRoomsToInteractWithSomethingAtTheEnd()
        {
            MimanPathfinder2.ClearRoomNetwork();

            _adam.logger.AddListener(Console.WriteLine);
            SmartWalkBehaviour.s_logger.AddListener(Console.WriteLine);

            /*
             * _adam.AddDataListener<Character.WalkMode>("walkMode", ((Character.WalkMode prev, Character.WalkMode newWalkMode) => {
             *      //throw new Exception("NEW WALK MODE: " + newWalkMode);
             *      Console.WriteLine("NEW WALK MODE: " + newWalkMode);
             * }));
             */

            _adam.position = new WorldCoordinate("Eden", 0, 4);

            MysticalCube cube = _world.tingRunner.GetTing <MysticalCube>("PowerCube");

            cube.position = new WorldCoordinate("Kitchen", 3, 3);

            _adam.WalkToTingAndInteract(cube);
            WorldTestHelper.UpdateWorld(_world, 60f);

            Assert.AreEqual(cube, _adam.handItem);
        }
Esempio n. 15
0
        public void PutMysticalCubeIntoInventory()
        {
            _world.roomRunner.CreateRoom <Room> ("Internet");

            _adam.position = new WorldCoordinate("Kitchen", new IntPoint(4, 3));
            _cube.position = new WorldCoordinate("Kitchen", new IntPoint(5, 3));

            // Hold the cube in hand
            _adam.PickUp(_cube);
            WorldTestHelper.UpdateWorld(_world, 3f);
            Assert.AreEqual(_cube, _adam.handItem);
            Assert.IsTrue(_cube.isBeingHeld);

            // Put it into the bag!
            _adam.PutHandItemIntoInventory();
            WorldTestHelper.UpdateWorld(_world, 3f);
            Assert.AreEqual(null, _adam.handItem);
            Assert.IsFalse(_cube.isBeingHeld);
            Assert.AreEqual(new WorldCoordinate(_adam.inventoryRoomName, IntPoint.Zero), _cube.position);

            // Look into the bag
            Ting[] inventoryItems = _adam.inventoryItems;
            Assert.AreEqual(1, inventoryItems.Length);
            Assert.AreEqual(_cube, inventoryItems[0]);

            // Take it out again
            _adam.TakeOutInventoryItem(_cube);
            WorldTestHelper.UpdateWorld(_world, 3f);
            Assert.AreEqual(_cube, _adam.handItem);
            Assert.IsTrue(_cube.isBeingHeld);
            Assert.AreEqual(_adam.position, _cube.position);
        }
        public void SendNumericDataFromComputerToComputer()
        {
            D.onDLog += Console.WriteLine;

            Computer sender   = _world.tingRunner.CreateTing <Computer>("Sender", new WorldCoordinate("Eden", 1, 3));
            Computer receiver = _world.tingRunner.CreateTing <Computer>("Receiver", new WorldCoordinate("Eden", 3, 2));

            sender.hasInternetAPI = true;

            sender.masterProgramName   = "Sender4";
            receiver.masterProgramName = "Receiver4";

            receiver.RunProgram(null);
            sender.RunProgram(null);

            WorldTestHelper.UpdateWorld(_world, 1f);

            Console.WriteLine("Output in sender:");
            PrintOutput(sender);

            Console.WriteLine("Output in receiver:");
            PrintOutput(receiver);

            Assert.IsFalse(sender.containsBrokenPrograms);
            Assert.IsFalse(receiver.containsBrokenPrograms);

//			Console.WriteLine("Errors in sender:");
//			PrintErrors(sender.masterProgram);
//
//			Console.WriteLine("Errors in receiver:");
//			PrintErrors(receiver.masterProgram);

            Assert.AreEqual("received: 5", receiver.consoleOutput[0]);
            Assert.AreEqual("x + x: 10", receiver.consoleOutput[1]);
        }
        public void ProblemWithLinesCommand()
        {
            var computer = _world.tingRunner.CreateTing <Computer> ("Computer1", testDefaultCoordinate);

            computer.hasGraphicsAPI = true;

            computer.masterProgramName = "BlankSlate";
            computer.masterProgram.sourceCodeContent =
                @"Lines([10,20,30,40,50,60])";

            var lines = new List <IntPoint>();

            computer.onLineDrawing = (p1, p2) => {
                lines.Add(p1);
                lines.Add(p2);
            };

            WorldTestHelper.UpdateWorld(_world, 1f);
            computer.masterProgram.Start();
            WorldTestHelper.UpdateWorld(_world, 1f);

            Assert.IsFalse(computer.containsBrokenPrograms);
            Assert.AreEqual(4, lines.Count);
            Assert.AreEqual(new IntPoint(10, 20), lines[1]);
            Assert.AreEqual(new IntPoint(30, 40), lines[0]);
            Assert.AreEqual(new IntPoint(30, 40), lines[3]);
            Assert.AreEqual(new IntPoint(50, 60), lines[2]);
        }
        public void CallBuiltInFunctionOnAnotherTing()
        {
            D.onDLog += Console.WriteLine;

            Computer sender   = _world.tingRunner.CreateTing <Computer>("Sender", new WorldCoordinate("Eden", 1, 3));
            Computer receiver = _world.tingRunner.CreateTing <Computer>("Receiver", new WorldCoordinate("Eden", 3, 2));

            sender.hasInternetAPI = true;

            sender.masterProgramName   = "CallMeSender";
            receiver.masterProgramName = "CallMeReceiver";

            receiver.RunProgram(null);
            sender.RunProgram(null);

            WorldTestHelper.UpdateWorld(_world, 1f);

            Console.WriteLine("Output in sender:");
            PrintOutput(sender);

            Console.WriteLine("Output in receiver:");
            PrintOutput(receiver);

            Console.WriteLine("Errors in sender:");
            PrintErrors(sender.masterProgram);

            Console.WriteLine("Errors in receiver:");
            PrintErrors(receiver.masterProgram);

            //Assert.AreEqual(1, receiver.currentLine);
            Assert.AreEqual("hej du", receiver.consoleOutput[0]);

            Assert.AreEqual(false, sender.containsBrokenPrograms);
            Assert.AreEqual(false, receiver.containsBrokenPrograms);
        }
        public void ToLowercase()
        {
            var computer = _world.tingRunner.CreateTing <Computer> ("Computer1", testDefaultCoordinate);

            computer.masterProgramName = "BlankSlate";
            computer.masterProgram.sourceCodeContent =
                @"
Print(ToLowercase('ErIK!A'))

string ToLowercase(var text)
    string res = ''
    loop c in text
        if IsUppercase(c)
            res += IntToChar(CharToInt(c) + 32)
        else
            res += c
        end
    end
    return res
end

bool IsUppercase(var c)
    return CharToInt(c) >= -32 && CharToInt(c) <= -7
end
";

            WorldTestHelper.UpdateWorld(_world, 1f);
            computer.masterProgram.Start();
            WorldTestHelper.UpdateWorld(_world, 1f);

            PrintErrors(computer.masterProgram);

            Assert.IsFalse(computer.containsBrokenPrograms);
            Assert.AreEqual("erik!a", computer.consoleOutput[0]);
        }
        public void CallExternalFunctionOnProgramWithPrintStatementInGlobalScope()
        {
            Computer computer1 = _world.tingRunner.CreateTing <Computer> ("Computer1", testDefaultCoordinate);

            computer1.masterProgramName = "Caller";
            computer1.logger.AddListener(o => Console.WriteLine("Computer1 log: " + o));

            Computer computer2 = _world.tingRunner.CreateTing <Computer>("Computer2", testDefaultCoordinate);

            computer2.masterProgramName = "Stupid";

            computer2.AddDataListener <string[]> ("consoleOutput", (pOldValue, pNewValue) => {
                Console.WriteLine("Computer2 printed: ");
                foreach (var s in pNewValue)
                {
                    Console.WriteLine(s);
                }
            });

            WorldTestHelper.UpdateWorld(_world, 1f);

            computer1.masterProgram.Start();              // call
            WorldTestHelper.UpdateWorld(_world, 1f);

            Assert.AreEqual("hej", computer2.consoleOutput[0]);
            Assert.AreEqual("", computer2.consoleOutput[1]);

            Assert.AreEqual(false, computer1.containsBrokenPrograms);
            Assert.AreEqual(false, computer2.containsBrokenPrograms);
        }
        public void PathfindingProgram()
        {
            foreach (string s in _world.Preload())
            {
            }

            var computer  = _world.tingRunner.CreateTing <Computer> ("Computer1", testDefaultCoordinate);
            var computer2 = _world.tingRunner.CreateTing <Computer> ("Computer2", testDefaultCoordinate);

            var p = new MimanPathfinder2(_world.tingRunner, _world.roomRunner);

            p.RecreateRoomNetwork();

            computer2.masterProgramName = "BlankSlate";

            computer.hasDoorAPI        = true;
            computer.masterProgramName = "BlankSlate";
            computer.masterProgram.sourceCodeContent =
                @"
					var path = FindPath('Computer1', 'Computer2')
					Print('Path: ' + path)
				"                ;

            WorldTestHelper.UpdateWorld(_world, 1f);
            computer.masterProgram.Start();
            WorldTestHelper.UpdateWorld(_world, 5f);              // can take up to 4 secs because of random

            PrintOutput(computer);
            PrintErrors(computer.masterProgram);

            Assert.IsFalse(computer.containsBrokenPrograms);
            Assert.AreEqual("Path: []", computer.consoleOutput[0]);
        }
        public void CallExternalFunctionThatFails()
        {
            Computer computer7 = _world.tingRunner.CreateTing <Computer> ("Computer7", testDefaultCoordinate);
            Computer computer8 = _world.tingRunner.CreateTing <Computer> ("Computer8", testDefaultCoordinate);

            computer7.masterProgramName = "Computer7CallFailingFunction";
            computer8.masterProgramName = "Computer8";

            computer7.logger.AddListener(s => Console.WriteLine("Computer7: " + s));

            //Console.WriteLine ("\n\nAsserting programs");
            D.isNull(computer7.masterProgram, "master program is null");
            D.isNull(computer7.floppyBootProgram, "floppy boot program is null");

            computer7.RunProgram(null);
            WorldTestHelper.UpdateWorld(_world, 1f);

            Assert.AreEqual(true, computer7.containsBrokenPrograms);
            PrintErrors(computer7.masterProgram);

            Assert.AreEqual(true, computer8.containsBrokenPrograms);
            PrintErrors(computer8.masterProgram);

            Console.WriteLine("RESTORE TIME");

            // should be able to restore
            computer7.masterProgram.sourceCodeContent = "";
            computer7.RunProgram(null);
            Assert.AreEqual(false, computer7.containsBrokenPrograms);
        }
        public void HackdevAllowFunction()
        {
            MimanPathfinder2.ClearRoomNetwork();

            var h = _world.tingRunner.CreateTing <Hackdev> ("Hackdev", testDefaultCoordinate);

            h.masterProgramName = "BlankSlate";

            h.masterProgram.sourceCodeContent =
                @"
bool Allow(string target, number level)
    Log('calling allow, level: ' + level)
    return level == 0
end
				"                ;

            h.PrepareForBeingHacked();
            h.masterProgram.Compile();

            PrintErrors(h.masterProgram);

            WorldTestHelper.UpdateWorld(_world, 3.0f);

            string msg = null;

            D.onDLog += (pMessage) => msg = pMessage;

            h.masterProgram.StartAtFunctionIfItExists("BLAHAHAHAHA", new object[] { "blah", 10 }, null);

            h.masterProgram.StartAtFunction("Allow", new object[] { "blah", 10 }, null);
            WorldTestHelper.UpdateWorld(_world, 1f);

            Assert.AreEqual("LOG: calling allow, level: 10", msg);
            Assert.IsTrue(h.masterProgram.HasFunction("Allow", true));
        }
        public void ChangeSourceCodeOverAndOverAgain()
        {
            Computer computer = _world.tingRunner.CreateTing <Computer> ("Computer", testDefaultCoordinate);

            computer.masterProgramName = "Foo";

            _world.dialogueRunner.RunStringAsFunction("ListActivePrograms()");

            for (int i = 0; i < 200; i++)
            {
                WorldTestHelper.UpdateWorld(_world, 1f);
                computer.RunProgram(null);
                WorldTestHelper.UpdateWorld(_world, 1f);
                computer.masterProgram.sourceCodeContent = "Print(10)";
            }

            _world.dialogueRunner.RunStringAsFunction("ListActivePrograms()");

            for (int i = 0; i < 200; i++)
            {
                WorldTestHelper.UpdateWorld(_world, 1f);
                computer.RunProgram(null);
                WorldTestHelper.UpdateWorld(_world, 1f);
                computer.masterProgram.sourceCodeContent = "Print(10)";
            }

            _world.dialogueRunner.RunStringAsFunction("ListActivePrograms()");

            Assert.AreEqual("10", computer.consoleOutput[0]);
            Assert.AreEqual("10", computer.consoleOutput[1]);
            Assert.AreEqual("10", computer.consoleOutput[10]);
        }
        public void CallPrintWithHugeNegativeNumber()
        {
            MimanPathfinder2.ClearRoomNetwork();

            var computer = _world.tingRunner.CreateTing <Computer> ("Computer", testDefaultCoordinate);

            computer.masterProgramName = "BlankSlate";

            computer.masterProgram.sourceCodeContent =
                @"
Print(-999999)
Print(-999999999999999999999)
Print(999999999999999999999)
				"                ;

            computer.PrepareForBeingHacked();
            computer.masterProgram.Compile();

            PrintErrors(computer.masterProgram);

            WorldTestHelper.UpdateWorld(_world, 1f);

            //string msg = null;
            //D.onDLog += (pMessage) => msg = pMessage;

            computer.masterProgram.Start();
            WorldTestHelper.UpdateWorld(_world, 1f);

            PrintErrors(computer.masterProgram);

            Assert.IsFalse(computer.containsBrokenPrograms);
            Assert.AreEqual("-999999", computer.consoleOutput[0]);
        }
Esempio n. 26
0
        public void WalkFromInvalidPointInSameRoom()
        {
            foreach (var s in _world.Preload())
            {
            }

            D.onDLog += Console.WriteLine;             // take care of the D.Log message from invalid path
            _eva.logger.AddListener(Console.WriteLine);
            _eva.position = new WorldCoordinate("Eden", new IntPoint(-200, 300));
            _eva.WalkTo(new WorldCoordinate("Eden", new IntPoint(1, 2)));

            // Since the starting tile is invalid (and null) the character will try to walk from the closest tile which should be in the lower left corner
            // The character seems to move to the next tile (0, 3) immediately though so that's where it should (?) be found
            WorldTestHelper.UpdateWorld(_world, 0.25f);


            // TODO !!! This test doesn't work anymore since the strategy to just choose the closest tile wasn't very good and now a random technique is used :(
            //Assert.AreEqual(new WorldCoordinate("Eden", new IntPoint(0, 3)), _eva.position);

            var room = _world.roomRunner.GetRoom("Eden");

            Console.WriteLine(room.GetTile(new IntPoint(-200, 300)));
            Console.WriteLine(room.GetTile(new IntPoint(1, 2)));

            WorldTestHelper.UpdateWorld(_world, 5f);
            Assert.AreEqual(new WorldCoordinate("Eden", new IntPoint(1, 2)), _eva.position);
        }
Esempio n. 27
0
        public void SetUp()
        {
            WorldTestHelper.GenerateInitData();
            InitialSaveFileCreator i = new InitialSaveFileCreator();

            _world = new World(i.CreateRelay(WorldTestHelper.INIT_DATA_PATH));
            _eva   = _world.tingRunner.GetTing("Eva") as Character;
        }
Esempio n. 28
0
 public void EvaTalks()
 {
     Assert.AreEqual("", _eva.dialogueLine);
     _world.dialogueRunner.StartConversation("EvaTalks");
     Assert.AreEqual("Hi!", _eva.dialogueLine);
     WorldTestHelper.UpdateWorld(_world, 15.0f);
     Assert.AreEqual("", _eva.dialogueLine);
 }
        public void SetUp()
        {
            D.onDLog += Console.WriteLine;
            WorldTestHelper.GenerateInitData();
            InitialSaveFileCreator i = new InitialSaveFileCreator();

            _world = new World(i.CreateRelay(WorldTestHelper.INIT_DATA_PATH));
        }
Esempio n. 30
0
        public void SitDown()
        {
            _adam.position = new WorldCoordinate("Eden", 0, 0);
            _adam.WalkToTingAndInteract(_seat);
            WorldTestHelper.UpdateWorld(_world, 30f);

            Assert.AreEqual("", _adam.actionName);
            Assert.AreEqual(true, _adam.sitting);
        }