Пример #1
0
 // ReSharper disable once MemberCanBePrivate.Global
 // Has to be public to be found by Burst reflection
 public static void Execute(ref EventReceiverJobData <TJob, TEvent> data)
 {
     // ReSharper disable once ForCanBeConvertedToForeach
     // Burst doesn't support foreach
     for (var i = 0; i < data.EventData.Length; i++)
     {
         var eventData = data.EventData[i];
         if (eventData.EventTypeHash == k_TypeHash)
         {
             var evt = Marshal.PtrToStructure <TEvent>(eventData.EventPtr);
             data.UserJob.Execute(evt);
         }
     }
 }
Пример #2
0
        public static unsafe JobHandle Schedule <TJob, TEvent>(
            this TJob job,
            VisualScriptingEventSystem eventSystem,
            JobHandle inputDeps = default)
            where TJob : struct, IVisualScriptingEventReceiverJob <TEvent>
            where TEvent : struct, IVisualScriptingEvent
        {
            var data = new EventReceiverJobData <TJob, TEvent>
            {
                UserJob   = job,
                EventData = eventSystem.Events
            };

            var handle     = eventSystem.AddJobHandleForProducer(inputDeps);
            var parameters = new JobsUtility.JobScheduleParameters(
                UnsafeUtility.AddressOf(ref data),
                ExecuteUserEventReceiverJobs <TJob, TEvent> .Initialize(),
                handle,
                ScheduleMode.Batched);

            return(JobsUtility.Schedule(ref parameters));
        }