public void GetCurrentTask_StartOnSideOnRoute3_ActorWalkThroughRount() { // ARRANGE _factActorNode = _map.Nodes.OfType <HexNode>().SelectBy(2, 6); _map.HoldNode(_factActorNode, _actor); var tacticalActUsageService = CreateTacticalActUsageService(); var logic = new PatrolLogic(_actor, _patrolRoute3Points, _map, _actorList, _decisionSource, tacticalActUsageService); const int expectedStepsToPatrolPoint_3_5 = 2; var expectedNode = _patrolRoute3Points.Points[2]; // третья точка маршрута // ACT for (var round = 0; round < expectedStepsToPatrolPoint_3_5; round++) { var task = logic.GetCurrentTask(); task.Execute(); } // ASSERT var factHexNode = (HexNode)_factActorNode; var expectedHexNode = (HexNode)expectedNode; factHexNode.OffsetX.Should().Be(expectedHexNode.OffsetX); factHexNode.OffsetY.Should().Be(expectedHexNode.OffsetY); }
public void GetCurrentTask_2PointsDiagonal_ReturningToStartPoint() { // ARRANGE const int expectedStepsToSecondPoint = 10; const int expectedWaiting = 1; const int expectedReturningStep = expectedStepsToSecondPoint + expectedWaiting + 1; var expectedSecondPoint = _patrolRoute2DiagonalPoints.Points.Last(); _factActorNode = _map.Nodes.OfType <HexNode>().SelectBy(0, 0); _map.HoldNode(_factActorNode, _actor); var tacticalActUsageService = CreateTacticalActUsageService(); var logic = new PatrolLogic(_actor, _patrolRoute3Points, _map, _actorList, _decisionSource, tacticalActUsageService); // ACT for (var round = 0; round < expectedReturningStep; round++) { var task = logic.GetCurrentTask(); task.Execute(); } _factActorNode.Should().NotBe(expectedSecondPoint); }
public void GetCurrentTask_2TurnWaiting_ContinueBypassAfterWaiting() { // ARRANGE const int doudleIdleDuration = 2; _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(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, 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), _map.Nodes.OfType <HexNode>().SelectBy(1, 1), }; var tacticalActUsageService = CreateTacticalActUsageService(); var decisionSourceMock = new Mock <IDecisionSource>(); decisionSourceMock.Setup(x => x.SelectIdleDuration(It.IsAny <int>(), It.IsAny <int>())) .Returns(doudleIdleDuration); _decisionSource = decisionSourceMock.Object; var logic = new PatrolLogic(_actor, _patrolRoute3Points, _map, _actorList, _decisionSource, tacticalActUsageService); // ACT for (var round = 0; round < expectedActorPositions.Length + 1; round++) { var task = logic.GetCurrentTask(); // ASSERT task.Should().NotBeNull(); switch (round) { case 5: case 6: case 10: case 11: case 16: case 17: task.Should().BeOfType <IdleTask>($"На {round} итерации ожидается задача на простой."); break; default: task.Should().BeOfType <MoveTask>($"На {round} итерации ожидается задача на перемещение."); break; } task.Execute(); if (round < expectedActorPositions.Length) { _factActorNode.Should().Be(expectedActorPositions[round], $"На {round} итерации неожиданные координаты актёра."); } else { _factActorNode.Should().Be(expectedActorPositions[0], $"На {round} итерации актёр должен начать маршрут заново."); } } }
public void GetCurrentTask_StartOnFirstPoint_ActorWalkThroughRound() { // 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.Length + 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.Length) { _factActorNode.Should().Be(expectedActorPositions[round], $"На {round} итерации неожиданные координаты актёра."); } else { _factActorNode.Should().Be(expectedActorPositions[0], $"На {round} итерации актёр должен начать маршрут заново."); } } }