public void AddNeighbour(NavCubeNode current, Vector3Int end, Vector3Int dir, float cost, NavCubeType searchType, NavCubeAgent agent) { Vector3Int pos = current.position + dir; NavCubeChunk.NavCubeData data = GetData(pos); if (agent != null) { for (int i = 0; i < agent.height; i++) { int ii = i - agent.offset; if (GetData(pos + Vector3Int.up * ii).type == NavCubeType.Blocked) { return; } } } else { if (data.type == NavCubeType.Blocked) { return; } } float heuristic = pos.Manhattan(end); NavCubeNode ncn = new NavCubeNode(pos, current.cost + data.cost * cost, heuristic, current); if (closedList.Contains(ncn)) { return; } if (openList.Contains(ncn)) { NavCubeNode ol_ncn = openList.Find(x => x.position.Equals(pos)); if (ol_ncn.total > ncn.total) { ol_ncn.cost = ncn.cost; ol_ncn.heuristic = ncn.heuristic; ol_ncn.parent = ncn.parent; } return; } if (searchType == NavCubeType.Walking) { if (data.type == NavCubeType.Walking) { openList.Add(ncn); } } else { openList.Add(ncn); } }
public static int Manhattan(this Vector3Int A, Vector3Int B) { Vector3Int vec = B - A; return(vec.Manhattan()); }