Exemplo n.º 1
0
    public bool IsCompleted(ref int availableWorkers)
    {
        switch (state)
        {
        case State.Idle:
            if (availableWorkers > 0)
            {
                voxelGen.Schedule();
                state = State.VoxelsScheduled;
                availableWorkers--;
            }
            break;

        case State.VoxelsScheduled:
            if (voxelGen.IsCompleted)
            {
                // TODO Schedule with dependency?
                voxelGen.Complete();
                meshGen.Schedule();
                state = State.MeshScheduled;
            }
            break;

        case State.MeshScheduled:
            if (meshGen.IsCompleted)
            {
                meshGen.Complete();
                state = State.Completed;
                availableWorkers++;

                foreach (Chunk chunk in AssociatedChunks)
                {
                    chunk.SetActive(true, meshGen.Mesh);
                }
            }
            break;
        }

        return(state == State.Completed);
    }