예제 #1
0
    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);
    }
예제 #2
0
    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();
    }