private void StartTask() { if (currentJob == null || currentTask != null) { return; } Debug.Log("Starting Octree Update job"); currentJob.Root.Locked = true; Action <object> job = (object data) => { OctreeUpdateJob cData = (OctreeUpdateJob)data; Root realRoot = Root; Root copy = realRoot.DeepCopy(); Root = copy; SE.Octree.Ops.Adapt(realRoot, cData.Position, cData.MaxDepth, 100); Root = realRoot; Debug.Log("Adapt finished"); //Root = copy; }; currentTask = Task.Factory.StartNew(job, currentJob); }
public void EnqueueUpdate(Vector3 position, int maxDepth) { OctreeUpdateJob jobData = new OctreeUpdateJob(); jobData.Root = Root; jobData.Position = position; jobData.MaxDepth = maxDepth; nextJob = jobData; Update(); }
public void Update() { if (currentTask != null && currentTask.Status == TaskStatus.RanToCompletion) { Debug.Log("Current task completed execution "); } if (currentTask == null || currentTask.Status == TaskStatus.RanToCompletion) { currentTask = null; currentJob = nextJob; nextJob = null; StartTask(); } }