private void FindPath(PathRequest request) { Vector2Int start = m_navGrid.WorldToCoords(request.PathStart); Vector2Int end = m_navGrid.WorldToCoords(request.PathEnd); var comeFromDict = PathfindingAlgorithms.Astar(start, end, m_navGrid); var result = PathfindingAlgorithms.RetracePath(m_navGrid, start, end, comeFromDict, false); lock (request) { request.IsSuccess = result.Item1; request.Path = result.Item2; } }
private void ThreadWork(object o) { PathRequest currRequest = null; while (m_doRunThreads) { if (m_pathRequests.Count > 0) { lock (m_pathRequests) currRequest = m_pathRequests.Dequeue(); FindPath(currRequest); } } }
public Path(List <Vector3> path, bool isSuccess, PathRequest originalRequest) { m_path = path; m_isSuccess = isSuccess; m_originalRequest = originalRequest; }
/// <summary> /// method that sends a path request to pathfind manager /// </summary> private void SearchForPath() { m_pathRequest = new PathRequest(this, transform.position, m_walkDestination); PathFindManager.Instance.RequestPath(m_pathRequest); }
/// <summary> /// Request a path search by pathrequest /// </summary> /// <param name="pathRequest"></param> public void RequestPath(PathRequest pathRequest) { lock (m_pathRequests) m_pathRequests.Enqueue(pathRequest); }