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