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(IMapNodeViewModel targetNode) { var actor = PlayerState.ActiveActor?.Actor; if (actor is null) { throw new InvalidOperationException(); } var startNode = actor.Node; var finishNode = targetNode.Node; if (startNode == finishNode) { Path.Clear(); return; } var sector = _player.SectorNode.Sector; if (sector is null) { throw new InvalidOperationException(); } var map = sector.Map; Path.Clear(); if (!map.IsPositionAvailableFor(finishNode, actor)) { return; } var context = new ActorPathFindingContext(actor, map, finishNode); var astar = new AStar(context, startNode, finishNode); var resultState = astar.Run(); if (resultState != State.GoalFound) { return; } RememberFoundPath(astar); }