private bool StartRequest(IPathRequest request) { Ensure.ArgumentNotNull(request, "request"); if (!request.isValid) { throw new ArgumentException("The request is invalid.", "request"); } if (_currentRequest != null) { throw new InvalidOperationException("A new request cannot be started while another request is being processed."); } _currentRequest = request; var start = request.fromGrid.GetCell(request.from) as IPathNode; _goal = request.toGrid.GetCell(request.to) as IPathNode; if (start == null) { CompleteRequest(PathingStatus.StartOutsideGrid); return false; } if (_goal == null) { CompleteRequest(PathingStatus.EndOutsideGrid); return false; } if (!_goal.isWalkable(_currentRequest.requester.attributes)) { CompleteRequest(PathingStatus.DestinationBlocked); return false; } OnStart(start); return true; }