public void RequestPath(NavRequest navRequest)//, GameObject player, float z_size, float p_size)
 {
     if (!pathRequestQueue.Contains(navRequest))
     {
         pathRequestQueue.Enqueue(navRequest);
     }
 }
    public static void RequestPath(NavRequest navRequest)
    {
        NavRequest request = Singleton.pathRequestQueue.Find(x => x.subject == navRequest.subject);

        Singleton.pathRequestQueue.Remove(request);
        Singleton.pathRequestQueue.Add(navRequest);
    }
    //Need optimization
    //Initialize every subject seekers' surrounding nodes as startnodes; spreading from target and pickup start node and assign to according subject's path
    void Update()
    {
        int process_count = process_thredshold;

        while (pathRequestQueue.Count > 0 && process_count > 0)//something missing here?
        {
            process_count -= 1;
            for (int i = 0; i < area_dict.Count; i++)
            {
                area_dict[i].initialize();
            }

            NavRequest navRequest = pathRequestQueue[0];
            pathRequestQueue.RemoveAt(0);

            if (navRequest.subject != null)
            {
                AI_Movement ai = navRequest.subject;

                //Navigate

                List <Vector2> solution = Astar_Algorithm_pathVector2(navRequest.currLocation, navRequest.destineLocation, navRequest.agentSize);
                ai.setNavigationPath(solution);
            }
        }
    }
Exemple #4
0
    //THIS HANDLES OUR QUEUED NAV REQUESTS
    private IEnumerator HandleQueue()
    {
        while (true)
        {
            if (QueuedNavs.Count > 0 && !bIsWorking)
            {
                //Take the front waiting part of the queue
                NavRequest CurRequest = QueuedNavs[0];
                QueuedNavs.RemoveAt(0);

                //Passes our request to the system
                StartCoroutine(GeneratePathTo(CurRequest.TargetX, CurRequest.TargetY, CurRequest.SourceX, CurRequest.SourceY, CurRequest.Requester, CurRequest.FinishCallBack));
            }
            yield return(null);
        }
    }
        FunDedicatedServerRpcMessage onNavRequest(string type, FunDedicatedServerRpcMessage request)
        {
            NavRequest req = FunapiDSRpcMessage.GetMessage <NavRequest>(request, MessageType.nav_request);
            // NavMeshAgent.CalculatePath(req.destination, path);

            NavReply reply = new NavReply();

            // For the test
            Vector3[] corners = new [] { Vector3.zero, Vector3.one, Vector3.back };
            for (int i = 0; i < corners.Length; ++i)
            {
                NavVector3 point = new NavVector3();
                point.x = corners[i].x;
                point.y = corners[i].y;
                point.z = corners[i].z;
                reply.waypoints.Add(point);
            }

            return(FunapiDSRpcMessage.CreateMessage(reply, MessageType.nav_reply));
        }
    public static void CancelRequestPath(AI_Movement subject)
    {
        NavRequest request = Singleton.pathRequestQueue.Find(x => x.subject == subject);

        Singleton.pathRequestQueue.Remove(request);
    }
 public void update(NavRequest newRequest)
 {
     destineLocation = newRequest.destineLocation;
     currLocation    = newRequest.currLocation;
     agentSize       = newRequest.agentSize;
 }