/// <summary> /// Internal implementation of executing a queue. /// </summary> private IEnumerator ExecuteQueueAsync(int queueId, List <GemAction> queue) { // Current barrier state GemActionBarrier barrier = new GemActionBarrier(); // Execute the queue foreach (var action in queue) { if (action.delay > 0f) { yield return(new WaitForSeconds(action.delay)); } switch (action.type) { case GemActionType.None: break; case GemActionType.Barrier: yield return(StartCoroutine(barrier.WaitAsync())); barrier.Reset(); break; default: StartCoroutine(ExecuteActionAsync(action, barrier)); break; } } // Wait for all the actions to finish yield return(StartCoroutine(barrier.WaitAsync())); // Free unused objects gemMap.ClearUnusedGems(); // Remove the queue from playing dict playingQueueDict.Remove(queueId); }