public void Run_GridGraphAndLinePath_PathFound() { // ARRAGE var map = CreateGridOpenMap(); var expectedPath = new IMapNode[] { map.Nodes.Cast <HexNode>().SelectBy(1, 1), map.Nodes.Cast <HexNode>().SelectBy(2, 2), map.Nodes.Cast <HexNode>().SelectBy(2, 3), map.Nodes.Cast <HexNode>().SelectBy(3, 4), map.Nodes.Cast <HexNode>().SelectBy(3, 5), map.Nodes.Cast <HexNode>().SelectBy(4, 6) }; var context = CreatePathFindingContext(); var astar = new AStar(map, context, expectedPath.First(), expectedPath.Last()); // ACT var factState = astar.Run(); // ASSERT factState.Should().Be(State.GoalFound); var factPath = astar.GetPath(); for (var i = 0; i < expectedPath.Count(); i++) { factPath[i].Should().Be(expectedPath[i]); } }
public void Run_CheckNeighborBypass_ExpectedPath() { // ARRAGE var map = CreateGridOpenMap(); var expectedPath = new IMapNode[] { map.Nodes.OfType <HexNode>().SelectBy(1, 1), map.Nodes.OfType <HexNode>().SelectBy(2, 2), map.Nodes.OfType <HexNode>().SelectBy(2, 3), map.Nodes.OfType <HexNode>().SelectBy(3, 3), map.Nodes.OfType <HexNode>().SelectBy(4, 3), map.Nodes.OfType <HexNode>().SelectBy(5, 3), }; var context = CreatePathFindingContext(); var astar = new AStar(map, context, expectedPath.First(), expectedPath.Last()); // ACT var factState = astar.Run(); // ASSERT factState.Should().Be(State.GoalFound); var factPath = astar.GetPath(); for (var i = 0; i < expectedPath.Count(); i++) { factPath[i].Should().Be(expectedPath[i]); } }
public void GetCurrentTask_StartOnFirstPoint_ActorWalkThroughRount() { // ARRANGE _factActorNode = _map.Nodes.OfType <HexNode>().SelectBy(1, 1); _map.HoldNode(_factActorNode, _actor); var expectedActorPositions = new IMapNode[] { _map.Nodes.OfType <HexNode>().SelectBy(2, 2), _map.Nodes.OfType <HexNode>().SelectBy(2, 3), _map.Nodes.OfType <HexNode>().SelectBy(3, 3), _map.Nodes.OfType <HexNode>().SelectBy(4, 3), _map.Nodes.OfType <HexNode>().SelectBy(5, 3), _map.Nodes.OfType <HexNode>().SelectBy(5, 3), _map.Nodes.OfType <HexNode>().SelectBy(4, 3), _map.Nodes.OfType <HexNode>().SelectBy(4, 4), _map.Nodes.OfType <HexNode>().SelectBy(3, 5), _map.Nodes.OfType <HexNode>().SelectBy(3, 5), _map.Nodes.OfType <HexNode>().SelectBy(3, 4), _map.Nodes.OfType <HexNode>().SelectBy(2, 3), _map.Nodes.OfType <HexNode>().SelectBy(2, 2), _map.Nodes.OfType <HexNode>().SelectBy(1, 1), _map.Nodes.OfType <HexNode>().SelectBy(1, 1), }; var tacticalActUsageService = CreateTacticalActUsageService(); var logic = new PatrolLogic(_actor, _patrolRoute3Points, _map, _actorList, _decisionSource, tacticalActUsageService); // ACT for (var round = 0; round < expectedActorPositions.Count() + 1; round++) { var task = logic.GetCurrentTask(); // ASSERT task.Should().NotBeNull(); switch (round) { case 5: case 9: case 14: task.Should().BeOfType <IdleTask>($"На {round} итерации ожидается задача на простой."); break; default: task.Should().BeOfType <MoveTask>($"На {round} итерации ожидается задача на перемещение."); break; } task.Execute(); if (round < expectedActorPositions.Count()) { _factActorNode.Should().Be(expectedActorPositions[round], $"На {round} итерации неожиданные координаты актёра."); } else { _factActorNode.Should().Be(expectedActorPositions[0], $"На {round} итерации актёр должен начать маршрут заново."); } } }