protected override void OnUpdate()
        {
            NativeQueue <PipePassedEvent> .ParallelWriter parallelWriter = eventQuery.AsParallelWriter();
            NavAgentSystem navAgentSystem = World.DefaultGameObjectInjectionWorld.GetOrCreateSystem <NavAgentSystem>();

            Entities.WithBurst().WithAll <NavAgentComponent>().ForEach((Entity e, ref AgentPathInfoComponent agentPathInfoComponentr, ref NavAgentComponent navAgent) =>
            {
                if (!agentPathInfoComponentr.goes && navAgent.status == AgentStatus.Idle)
                {
                    navAgent.status = AgentStatus.PathQueued;
                    agentPathInfoComponentr.goes = !agentPathInfoComponentr.goes;
                    Vector3 destination          = agentPathInfoComponentr.goes ? agentPathInfoComponentr.endPos : agentPathInfoComponentr.startPos;

                    parallelWriter.Enqueue(new PipePassedEvent {
                        destination = destination,
                        Entity      = e,
                        navAgent    = navAgent,
                    });
                }
            }).Schedule();

            while (eventQuery.TryDequeue(out PipePassedEvent pipePassedEvent))
            {
                navAgentSystem.SetDestination(pipePassedEvent.Entity, pipePassedEvent.navAgent, pipePassedEvent.destination);
            }
        }
Пример #2
0
 public void Execute()
 {
     while (needsPath.TryDequeue(out AgentData item))
     {
         var destination = BuildingCacheSystem.GetCommercialBuilding();
         NavAgentSystem.SetDestinationStatic(item.entity, item.agent, destination, item.agent.areaMask);
     }
 }
 public void Execute()
 {
     while (needsPath.TryDequeue(out int index))
     {
         var destination = BuildingCacheSystem.GetCommercialBuilding();
         NavAgentSystem.SetDestinationStatic(data.Entities[index], data.Agents[index],
                                             data.Positions[index], data.Rotations[index], destination);
     }
 }