Ejemplo n.º 1
0
        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]);
            }
        }
Ejemplo n.º 2
0
        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]);
            }
        }
Ejemplo n.º 3
0
        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} итерации актёр должен начать маршрут заново.");
                }
            }
        }