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); } }
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); } }