示例#1
0
        private void CreatePath(IMapNodeViewModel targetNode)
        {
            var actor      = PlayerState.ActiveActor.Actor;
            var startNode  = actor.Node;
            var finishNode = targetNode.Node;
            var map        = SectorManager.CurrentSector.Map;

            Path.Clear();

            if (!map.IsPositionAvailableFor(finishNode, actor))
            {
                return;
            }

            var context = new PathFindingContext(actor);

            var astar       = new AStar(map, context, startNode, finishNode);
            var resultState = astar.Run();

            if (resultState != State.GoalFound)
            {
                return;
            }

            RememberFoundPath(astar);
        }
示例#2
0
        private void CreatePath()
        {
            var context = new PathFindingContext(Actor)
            {
                TargetNode = TargetNode
            };

            var startNode  = Actor.Node;
            var finishNode = TargetNode;

            _path.Clear();

            _map.FindPath(startNode, finishNode, context, _path);
        }
示例#3
0
        /// <summary>
        /// Выполняет поиск пути к указанному узлу.
        /// </summary>
        /// <param name="start">Начальный узел поиска пути.</param>
        /// <param name="end">Целевой узел поиска пути.</param>
        /// <param name="context">Контекст поиска пути.</param>
        /// <param name="outputPath">В результате будет содержать набор узлов,
        /// представляющих путь из указанного узла в целевой.</param>
        /// <remarks>
        /// Передача списка для результатов сделана для оптимизации - не нужно каждый раз создавать список
        /// и выделять под него память в зависимости от найденного пути.
        /// </remarks>
        public void FindPath(IMapNode start, IMapNode end, PathFindingContext context, List <IMapNode> outputPath)
        {
            var startNode  = start;
            var finishNode = end;

            var astar       = new AStar(this, context, startNode, finishNode);
            var resultState = astar.Run();

            if (resultState == State.GoalFound)
            {
                var foundPath = astar.GetPath().Skip(1).ToArray();
                foreach (var pathNode in foundPath)
                {
                    outputPath.Add((HexNode)pathNode);
                }
            }
        }
示例#4
0
        private void CreatePath()
        {
            var startNode  = Actor.Node;
            var finishNode = TargetNode;

            _path.Clear();

            var context = new PathFindingContext(Actor)
            {
                TargetNode = TargetNode
            };

            var astar       = new AStar(_map, context, startNode, finishNode);
            var resultState = astar.Run();

            if (resultState == State.GoalFound)
            {
                var foundPath = astar.GetPath().Skip(1).ToArray();
                foreach (var pathNode in foundPath)
                {
                    _path.Add((HexNode)pathNode);
                }
            }
        }
示例#5
0
        private void CreatePath()
        {
            var nodeViewModel = GetSelectedNodeViewModel();

            var startNode  = _playerState.ActiveActor.Actor.Node;
            var finishNode = nodeViewModel.Node;
            var map        = _sectorManager.CurrentSector.Map;

            _path.Clear();

            var context = new PathFindingContext(_playerState.ActiveActor.Actor);

            var astar       = new AStar(map, context, startNode, finishNode);
            var resultState = astar.Run();

            if (resultState == State.GoalFound)
            {
                var foundPath = astar.GetPath().Skip(1).ToArray();
                foreach (var pathNode in foundPath)
                {
                    _path.Add((HexNode)pathNode);
                }
            }
        }