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); }