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