Ejemplo n.º 1
0
        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;
        }