public JumpPointParam(BaseGrid iGrid, GridPos iStartPos, GridPos iEndPos, EndNodeUnWalkableTreatment iAllowEndNodeUnWalkable = EndNodeUnWalkableTreatment.Allow, DiagonalMovement iDiagonalMovement = DiagonalMovement.Always, HeuristicMode iMode = HeuristicMode.Euclidean) : base(iGrid, iStartPos, iEndPos, iDiagonalMovement, iMode) { CurEndNodeUnWalkableTreatment = iAllowEndNodeUnWalkable; openList = new IntervalHeap <Node>(); CurIterationType = IterationType.Loop; }
public JumpPointParam(BaseGrid iGrid, EndNodeUnWalkableTreatment iAllowEndNodeUnWalkable = EndNodeUnWalkableTreatment.ALLOW, HeuristicMode iMode = HeuristicMode.EUCLIDEAN) : base(iGrid, iMode) { CurEndNodeUnWalkableTreatment = iAllowEndNodeUnWalkable; openList = new IntervalHeap <Node>(); CurIterationType = IterationType.LOOP; }
public JumpPointParam(BaseGrid grid, EndNodeUnWalkableTreatment allowEndNodeUnWalkable = EndNodeUnWalkableTreatment.Allow, DiagonalMovement diagonalMovement = DiagonalMovement.Always, HeuristicMode mode = HeuristicMode.Euclidean) : base(grid, diagonalMovement, mode) { CurEndNodeUnWalkableTreatment = allowEndNodeUnWalkable; OpenList = new IntervalHeap <Node>(); CurIterationType = IterationType.Loop; }
/// <summary> /// Finds a path between 2 position on a map /// </summary> /// <param name="startPosition">Starting position</param> /// <param name="endPosition">Destination</param> /// <param name="map">Game map currently being used</param> /// <param name="endNodeUnWalkable"></param> /// <returns>A list of Vector2 waypoints that the object must traverse to get to its destination</returns> internal Stack <Vector2> FindPath(Vector2 startPosition, Vector2 endPosition, ref Map.Map map, EndNodeUnWalkableTreatment endNodeUnWalkable = EndNodeUnWalkableTreatment.DISALLOW) { if (!Map.Map.IsOnTop(endPosition) || !map.GetCollisionMap().GetWalkabilityGrid().IsWalkableAt(VectorToGridPos(endPosition))) { return(new Stack <Vector2>()); } var startGridPos = VectorToGridPos(startPosition); var endGridPos = VectorToGridPos(endPosition); if (ClearDirectPath(startGridPos.x, startGridPos.y, endGridPos.x, endGridPos.y, ref map)) { var pathVector = new Stack <Vector2>(1); pathVector.Push(endPosition); return(pathVector); } else { if (mJpParam != null) { mJpParam.Reset(VectorToGridPos(startPosition), VectorToGridPos(endPosition)); } else { mJpParam = new JumpPointParam(map.GetCollisionMap().GetWalkabilityGrid(), startGridPos, iDiagonalMovement: DiagonalMovement.OnlyWhenNoObstacles, iEndPos: endGridPos, iAllowEndNodeUnWalkable: endNodeUnWalkable, iMode: HeuristicMode.MANHATTAN); } var pathGrid = JumpPointFinder.FindPath(mJpParam); var pathVector = new Stack <Vector2>(pathGrid.Count); pathVector.Push(endPosition); for (var i = pathGrid.Count - 1; i > 0; i--) { var gridPos = GridPosToVector2(pathGrid[i]); pathVector.Push(gridPos); } return(pathVector); } }