protected override JobHandle OnUpdate(JobHandle inputDeps) { CheckDisposeTempData(); // Compute index positionsMap = new NativeHashMap <int, int>(m_PowderGroup.Length, Allocator.Temp); toDeleteEntities = new NativeHashMap <int, int>(Mathf.Max(m_PowderGroup.Length / 10, 64), Allocator.Temp); m_TempDataAllocated = true; var computeHashJob = new HashCoordJob() { powders = m_PowderGroup.powders, hashMap = positionsMap }; var previousJobHandle = computeHashJob.Schedule(m_PowderGroup.Length, 64, inputDeps); if ((Input.GetMouseButtonDown(0) || Input.GetMouseButton(0)) && PowderGame.IsInWorld(Input.mousePosition)) { var coord = PowderGame.ScreenToCoord(Input.mousePosition); var spawnJob = new SpawnJob() { hashMap = positionsMap, coord = coord, cmdBuffer = m_Barrier.CreateCommandBuffer(), type = PowderGame.currentPowder, isPainting = !Input.GetMouseButtonDown(0) }; previousJobHandle = spawnJob.Schedule(previousJobHandle); } // Simulate if (PowderGame.simulate) { var simulateJob = new SimulateJob() { powders = m_PowderGroup.powders, positions = m_PowderGroup.positions, hashMap = positionsMap, rand = Rand.Create(), entities = m_PowderGroup.entities, cmdBuffer = m_Barrier.CreateCommandBuffer(), toDeleteEntities = toDeleteEntities }; previousJobHandle = simulateJob.Schedule(m_PowderGroup.Length, 64, previousJobHandle); } var deleteEntitiesJob = new DeleteEntitiesJob() { entities = m_PowderGroup.entities, cmdBuffer = m_Barrier.CreateCommandBuffer(), toDeleteEntities = toDeleteEntities }; previousJobHandle = deleteEntitiesJob.Schedule(m_PowderGroup.Length, 64, previousJobHandle); inputDeps = previousJobHandle; return(inputDeps); }
void SimulateJobs() { NativeArray <Vector3> vertsNative = new NativeArray <Vector3>(verts, Allocator.TempJob); var job = new SimulateJob { nativeVerts = vertsNative, multiplier = multiplier, scale = scale, flowSpeed = flowSpeed, time = Time.time }; var jobHandle = job.Schedule(vertsNative.Length, 250); jobHandle.Complete(); vertsNative.CopyTo(verts); GetComponent <MeshFilter>().mesh.vertices = verts; vertsNative.Dispose(); }