public void BuildRoomNetwork()
        {
            var world = CreateWorldWithSomeRooms();
            var pathfinder = new MimanPathfinder2(world.tingRunner, world.roomRunner);

            var network = pathfinder.RecreateRoomNetwork();
            Console.WriteLine(network.ToString());

            var eden = world.roomRunner.GetRoom("Eden");
            var mid = world.roomRunner.GetRoom("MiddleRoom");
            var wrong = world.roomRunner.GetRoom("WrongRoom");
            var dist = world.roomRunner.GetRoom("DistantRoom");

            var edenDoor = world.tingRunner.GetTing<Door>("edenDoor");
            var middleRoomDoor1 = world.tingRunner.GetTing<Door>("middleRoomDoor1");
            var middleRoomDoor2 = world.tingRunner.GetTing<Door>("middleRoomDoor2");
            var middleRoomDoor3 = world.tingRunner.GetTing<Door>("middleRoomDoor3");
            var wrongRoomDoor = world.tingRunner.GetTing<Door>("wrongRoomDoor");
            var wrongRoomUnattachedDoor = world.tingRunner.GetTing<Door>("wrongRoomUnattachedDoor");
            var distantRoomDoor = world.tingRunner.GetTing<Door>("distantRoomDoor");

            Assert.AreEqual(new Dictionary<RoomGroup,Ting>() {{new RoomGroup(mid, 0), edenDoor}}, network.linkedRoomGroups[new RoomGroup(eden, 0)]);
            Assert.AreEqual(new Dictionary<RoomGroup,Ting>()
                {
                {new RoomGroup(eden, 0), middleRoomDoor1},
                    {new RoomGroup(wrong, 0), middleRoomDoor3}, // ORDERED?! wtf
                    {new RoomGroup(dist, 0), middleRoomDoor2},

                },
                network.linkedRoomGroups[new RoomGroup(mid, 0)]);
            Assert.AreEqual(new Dictionary<RoomGroup,Ting>() {{new RoomGroup(mid, 0), wrongRoomDoor}}, network.linkedRoomGroups[new RoomGroup(wrong, 0)]);
            Assert.AreEqual(new Dictionary<RoomGroup,Ting>() {{new RoomGroup(eden, 0), wrongRoomUnattachedDoor}}, network.linkedRoomGroups[new RoomGroup(wrong, 1)]);
            Assert.AreEqual(new Dictionary<RoomGroup,Ting>() {{new RoomGroup(mid, 0), distantRoomDoor}}, network.linkedRoomGroups[new RoomGroup(dist, 0)]);
        }
        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]);
        }
Esempio n. 3
0
        public void PathfindThroughElevator()
        {
            _eva.logger.AddListener(Console.WriteLine);

            SimpleRoomBuilder srb = new SimpleRoomBuilder(_world.roomRunner);

            srb.CreateRoomWithSize("DistantRoom", 10, 10);
            srb.CreateRoomWithSize("ElevatorRoom", 10, 10);

            // Add doors
            var elevatorDoor1    = _world.tingRunner.CreateTing <Door>("ElevatorDoor1", new WorldCoordinate("Eden", new IntPoint(4, 4)));
            var elevatorDoor2    = _world.tingRunner.CreateTing <Door>("ElevatorDoor2", new WorldCoordinate("DistantRoom", new IntPoint(3, 4)));
            var elevatorRoomDoor = _world.tingRunner.CreateTing <Door>("ElevatorRoomDoor", new WorldCoordinate("ElevatorRoom", new IntPoint(4, 4)));

            var p1 = _world.tingRunner.CreateTing <Point>("p1", new WorldCoordinate("Eden", new IntPoint(2, 4)));
            var p2 = _world.tingRunner.CreateTing <Point>("p2", new WorldCoordinate("DistantRoom", new IntPoint(4, 4)));

            var pathfinder = new MimanPathfinder2(_world.tingRunner, _world.roomRunner);
            var result     = pathfinder.Search(p1, p2);

            Console.WriteLine("Network at first:");
            var network = pathfinder.RecreateRoomNetwork();

            Console.WriteLine(network.ToString());

            Assert.AreEqual(MimanPathStatus.NO_PATH_FOUND, result.status);

            elevatorDoor1.targetDoorName = "ElevatorRoomDoor";
            elevatorDoor2.targetDoorName = "ElevatorRoomDoor";

            elevatorRoomDoor.elevatorAlternatives = new string[] { "ElevatorDoor1", "ElevatorDoor2" };
            elevatorRoomDoor.elevatorFloor        = 0;

            Console.WriteLine("Network after adding elevator alternatives:");
            var network2 = pathfinder.RecreateRoomNetwork();

            Console.WriteLine(network2.ToString());

            Console.WriteLine(" - second search - ");
            var result2 = pathfinder.Search(p1, p2);

            Assert.AreEqual(MimanPathStatus.FOUND_GOAL, result2.status);
        }
Esempio n. 4
0
        public void LoopedDoorsPathfinding()
        {
            var world = CreateWorldWithSomeRooms();

            var edenDoor        = world.tingRunner.GetTing <Door>("edenDoor");
            var middleRoomDoor1 = world.tingRunner.GetTing <Door>("middleRoomDoor1");
            var middleRoomDoor2 = world.tingRunner.GetTing <Door>("middleRoomDoor2");
            var middleRoomDoor3 = world.tingRunner.GetTing <Door>("middleRoomDoor3");
            var wrongRoomDoor   = world.tingRunner.GetTing <Door>("wrongRoomDoor");
            var distantRoomDoor = world.tingRunner.GetTing <Door>("distantRoomDoor");

            //         EDEN <-> MIDDLE 1    MIDDLE 2 <-> WRONG
            //  DISTANT      <- MIDDLE 3

            edenDoor.targetDoorName        = middleRoomDoor1.name;
            middleRoomDoor1.targetDoorName = middleRoomDoor2.name;
            middleRoomDoor2.targetDoorName = wrongRoomDoor.name;
            middleRoomDoor3.targetDoorName = distantRoomDoor.name;
            wrongRoomDoor.targetDoorName   = edenDoor.name;

            var eden  = world.roomRunner.GetRoom("Eden");
            var mid   = world.roomRunner.GetRoom("MiddleRoom");
            var wrong = world.roomRunner.GetRoom("WrongRoom");
            var dist  = world.roomRunner.GetRoom("DistantRoom");

            eden.worldPosition  = new IntPoint(0, 0);
            mid.worldPosition   = new IntPoint(10, 0);
            wrong.worldPosition = new IntPoint(10, 0);
            dist.worldPosition  = new IntPoint(-2000, 0);

            var pathfinder = new MimanPathfinder2(world.tingRunner, world.roomRunner);
            var network    = pathfinder.RecreateRoomNetwork();

            Console.WriteLine(network.ToString());

            var p1 = world.tingRunner.CreateTing <Point>("p1", new WorldCoordinate("Eden", new IntPoint(2, 4)));
            var p2 = world.tingRunner.CreateTing <Point>("p2", new WorldCoordinate("DistantRoom", new IntPoint(4, 4)));

            var result = pathfinder.Search(p1, p2);

            Console.WriteLine("Result: " + result);

            Assert.AreEqual(MimanPathStatus.FOUND_GOAL, result.status);
            Assert.AreEqual(2, result.tings.Length);
            Assert.AreEqual("edenDoor", result.tings[0].name);
            Assert.AreEqual("middleRoomDoor3", result.tings[1].name);
        }
Esempio n. 5
0
        public void BuildRoomNetwork()
        {
            var world      = CreateWorldWithSomeRooms();
            var pathfinder = new MimanPathfinder2(world.tingRunner, world.roomRunner);

            var network = pathfinder.RecreateRoomNetwork();

            Console.WriteLine(network.ToString());

            var eden  = world.roomRunner.GetRoom("Eden");
            var mid   = world.roomRunner.GetRoom("MiddleRoom");
            var wrong = world.roomRunner.GetRoom("WrongRoom");
            var dist  = world.roomRunner.GetRoom("DistantRoom");

            var edenDoor                = world.tingRunner.GetTing <Door>("edenDoor");
            var middleRoomDoor1         = world.tingRunner.GetTing <Door>("middleRoomDoor1");
            var middleRoomDoor2         = world.tingRunner.GetTing <Door>("middleRoomDoor2");
            var middleRoomDoor3         = world.tingRunner.GetTing <Door>("middleRoomDoor3");
            var wrongRoomDoor           = world.tingRunner.GetTing <Door>("wrongRoomDoor");
            var wrongRoomUnattachedDoor = world.tingRunner.GetTing <Door>("wrongRoomUnattachedDoor");
            var distantRoomDoor         = world.tingRunner.GetTing <Door>("distantRoomDoor");

            Assert.AreEqual(new Dictionary <RoomGroup, Ting>()
            {
                { new RoomGroup(mid, 0), edenDoor }
            }, network.linkedRoomGroups[new RoomGroup(eden, 0)]);
            Assert.AreEqual(new Dictionary <RoomGroup, Ting>()
            {
                { new RoomGroup(eden, 0), middleRoomDoor1 },
                { new RoomGroup(wrong, 0), middleRoomDoor3 },                       // ORDERED?! wtf
                { new RoomGroup(dist, 0), middleRoomDoor2 },
            },
                            network.linkedRoomGroups[new RoomGroup(mid, 0)]);
            Assert.AreEqual(new Dictionary <RoomGroup, Ting>()
            {
                { new RoomGroup(mid, 0), wrongRoomDoor }
            }, network.linkedRoomGroups[new RoomGroup(wrong, 0)]);
            Assert.AreEqual(new Dictionary <RoomGroup, Ting>()
            {
                { new RoomGroup(eden, 0), wrongRoomUnattachedDoor }
            }, network.linkedRoomGroups[new RoomGroup(wrong, 1)]);
            Assert.AreEqual(new Dictionary <RoomGroup, Ting>()
            {
                { new RoomGroup(mid, 0), distantRoomDoor }
            }, network.linkedRoomGroups[new RoomGroup(dist, 0)]);
        }
Esempio n. 6
0
        public void SimplePathfinding()
        {
            var world = CreateWorldWithSomeRooms();

            var pathfinder = new MimanPathfinder2(world.tingRunner, world.roomRunner);

            var network = pathfinder.RecreateRoomNetwork();

            Console.WriteLine(network.ToString());

            var p1 = world.tingRunner.CreateTing <Point>("p1", new WorldCoordinate("Eden", new IntPoint(2, 4)));
            var p2 = world.tingRunner.CreateTing <Point>("p2", new WorldCoordinate("DistantRoom", new IntPoint(4, 4)));

            var result = pathfinder.Search(p1, p2);

            Console.WriteLine("Result: " + result);

            Assert.AreEqual(MimanPathStatus.FOUND_GOAL, result.status);
            Assert.AreEqual(2, result.tings.Length);
            Assert.AreEqual("edenDoor", result.tings[0].name);
            Assert.AreEqual("middleRoomDoor2", result.tings[1].name);
        }
        public void SimplePathfinding()
        {
            var world = CreateWorldWithSomeRooms();

            var pathfinder = new MimanPathfinder2(world.tingRunner, world.roomRunner);

            var network = pathfinder.RecreateRoomNetwork();
            Console.WriteLine(network.ToString());

            var p1 = world.tingRunner.CreateTing<Point>("p1", new WorldCoordinate("Eden", new IntPoint(2, 4)));
            var p2 = world.tingRunner.CreateTing<Point>("p2", new WorldCoordinate("DistantRoom", new IntPoint(4, 4)));

            var result = pathfinder.Search(p1, p2);
            Console.WriteLine("Result: " + result);

            Assert.AreEqual(MimanPathStatus.FOUND_GOAL, result.status);
            Assert.AreEqual(2, result.tings.Length);
            Assert.AreEqual("edenDoor", result.tings[0].name);
            Assert.AreEqual("middleRoomDoor2", result.tings[1].name);
        }
        public void PathfindThroughElevator()
        {
            _eva.logger.AddListener(Console.WriteLine);

            SimpleRoomBuilder srb = new SimpleRoomBuilder(_world.roomRunner);
            srb.CreateRoomWithSize("DistantRoom", 10, 10);
            srb.CreateRoomWithSize("ElevatorRoom", 10, 10);

            // Add doors
            var elevatorDoor1 = _world.tingRunner.CreateTing<Door>("ElevatorDoor1", new WorldCoordinate("Eden", new IntPoint(4, 4)));
            var elevatorDoor2 = _world.tingRunner.CreateTing<Door>("ElevatorDoor2", new WorldCoordinate("DistantRoom", new IntPoint(3, 4)));
            var elevatorRoomDoor = _world.tingRunner.CreateTing<Door>("ElevatorRoomDoor", new WorldCoordinate("ElevatorRoom", new IntPoint(4, 4)));

            var p1 = _world.tingRunner.CreateTing<Point>("p1", new WorldCoordinate("Eden", new IntPoint(2, 4)));
            var p2 = _world.tingRunner.CreateTing<Point>("p2", new WorldCoordinate("DistantRoom", new IntPoint(4, 4)));

            var pathfinder = new MimanPathfinder2(_world.tingRunner, _world.roomRunner);
            var result = pathfinder.Search(p1, p2);

            Console.WriteLine("Network at first:");
            var network = pathfinder.RecreateRoomNetwork();
            Console.WriteLine(network.ToString());

            Assert.AreEqual(MimanPathStatus.NO_PATH_FOUND, result.status);

            elevatorDoor1.targetDoorName = "ElevatorRoomDoor";
            elevatorDoor2.targetDoorName = "ElevatorRoomDoor";

            elevatorRoomDoor.elevatorAlternatives = new string[] { "ElevatorDoor1", "ElevatorDoor2" };
            elevatorRoomDoor.elevatorFloor = 0;

            Console.WriteLine("Network after adding elevator alternatives:");
            var network2 = pathfinder.RecreateRoomNetwork();
            Console.WriteLine(network2.ToString());

            Console.WriteLine(" - second search - ");
            var result2 = pathfinder.Search(p1, p2);

            Assert.AreEqual(MimanPathStatus.FOUND_GOAL, result2.status);
        }
        public void LoopedDoorsPathfindingLoopInStartRoom()
        {
            var world = CreateWorldWithSomeRooms();

            var edenDoor = world.tingRunner.GetTing<Door>("edenDoor");
            var middleRoomDoor1 = world.tingRunner.GetTing<Door>("middleRoomDoor1");
            var middleRoomDoor2 = world.tingRunner.GetTing<Door>("middleRoomDoor2");
            var middleRoomDoor3 = world.tingRunner.GetTing<Door>("middleRoomDoor3");
            var wrongRoomDoor = world.tingRunner.GetTing<Door>("wrongRoomDoor");
            //var distantRoomDoor = world.tingRunner.GetTing<Door>("distantRoomDoor");

            middleRoomDoor1.targetDoorName = middleRoomDoor2.name;
            middleRoomDoor2.targetDoorName = wrongRoomDoor.name;
            middleRoomDoor3.targetDoorName = middleRoomDoor2.name;
            wrongRoomDoor.targetDoorName = edenDoor.name;

            var eden = world.roomRunner.GetRoom("Eden");
            var mid = world.roomRunner.GetRoom("MiddleRoom");
            var wrong = world.roomRunner.GetRoom("WrongRoom");
            var dist = world.roomRunner.GetRoom("DistantRoom");

            mid.worldPosition = new IntPoint(0,0);
            wrong.worldPosition = new IntPoint(100,0);
            eden.worldPosition = new IntPoint(-200,0);
            dist.worldPosition = new IntPoint(200,0);

            var pathfinder = new MimanPathfinder2(world.tingRunner, world.roomRunner);
            var network = pathfinder.RecreateRoomNetwork();
            Console.WriteLine(network.ToString());

            var p1 = world.tingRunner.CreateTing<Point>("p1", new WorldCoordinate("MiddleRoom", new IntPoint(2, 4)));
            var p2 = world.tingRunner.CreateTing<Point>("p2", new WorldCoordinate("Eden", new IntPoint(4, 4)));

            var result = pathfinder.Search(p1, p2);
            Console.WriteLine("Result: " + result);

            Assert.AreEqual(MimanPathStatus.FOUND_GOAL, result.status);
            Assert.AreEqual(2, result.tings.Length);
            Assert.AreEqual("middleRoomDoor2", result.tings[0].name);
            Assert.AreEqual("wrongRoomDoor", result.tings[1].name);
        }