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]); }
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 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); }
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 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); }