| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 | 
							- using System.Collections;
 
- using System.Collections.Generic;
 
- using UnityEngine;
 
- using System.Linq;
 
- using Unity.Jobs;
 
- using Unity.Collections;
 
- // using Unity.Entities;
 
- namespace GraphProcessor
 
- {
 
- 	/// <summary>
 
- 	/// Graph processor
 
- 	/// </summary>
 
- 	public class JobGraphProcessor : BaseGraphProcessor
 
- 	{
 
- 		GraphScheduleList[]			scheduleList;
 
- 		
 
- 		internal class GraphScheduleList
 
- 		{
 
- 			public BaseNode			node;
 
- 			public BaseNode[]		dependencies;
 
- 	
 
- 			public GraphScheduleList(BaseNode node)
 
- 			{
 
- 				this.node = node;
 
- 			}
 
- 		}
 
- 		/// <summary>
 
- 		/// Manage graph scheduling and processing
 
- 		/// </summary>
 
- 		/// <param name="graph">Graph to be processed</param>
 
- 		public JobGraphProcessor(BaseGraph graph) : base(graph) {}
 
- 		public override void UpdateComputeOrder()
 
- 		{
 
- 			scheduleList = graph.nodes.OrderBy(n => n.computeOrder).Select(n => {
 
- 				GraphScheduleList gsl = new GraphScheduleList(n);
 
- 				gsl.dependencies = n.GetInputNodes().ToArray();
 
- 				return gsl;
 
- 			}).ToArray();
 
- 		}
 
- 		/// <summary>
 
- 		/// Schedule the graph into the job system
 
- 		/// </summary>
 
- 		public override void Run()
 
- 		{
 
- 			int count = scheduleList.Length;
 
- 			var scheduledHandles = new Dictionary< BaseNode, JobHandle >();
 
- 			for (int i = 0; i < count; i++)
 
- 			{
 
- 				JobHandle dep = default(JobHandle);
 
- 				var schedule = scheduleList[i];
 
- 				int dependenciesCount = schedule.dependencies.Length;
 
- 				for (int j = 0; j < dependenciesCount; j++)
 
- 					dep = JobHandle.CombineDependencies(dep, scheduledHandles[schedule.dependencies[j]]);
 
- 				// TODO: call the onSchedule on the current node
 
- 				// JobHandle currentJob = schedule.node.OnSchedule(dep);
 
- 				// scheduledHandles[schedule.node] = currentJob;
 
- 			}
 
- 			JobHandle.ScheduleBatchedJobs();
 
- 		}
 
- 	}
 
- }
 
 
  |