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