IEnumerator RewardAnimation(CardTypeCount[] reward) { button.interactable = false; RewardFlipCard rewardCardPrefab = deckManager.rewardCardPrefab; GameObject rewardPanel = deckManager.rewardPanel; Transform rewardGridZone = deckManager.rewardGridZone; yield return(null); Vector3 initScale = rewardGridZone.parent.localScale; rewardGridZone.parent.localScale = Vector3.zero; rewardPanel.SetActive(true); List <RewardFlipCard> rewardFlipCards = new List <RewardFlipCard>(); // add cards to reward for (int i = 0; i < reward.Length; ++i) { if (reward[i].count == 0) { continue; } RewardFlipCard card = Instantiate(rewardCardPrefab, rewardGridZone) as RewardFlipCard; card.reward = reward[i]; rewardFlipCards.Add(card); } int frames = (int)(0.5f / Time.deltaTime); for (int i = 0; i < frames; ++i) { rewardGridZone.parent.localScale = Vector3.Lerp(Vector3.zero, initScale, (float)(i + 1) / frames); yield return(null); } // wait for every card to be flipped while (!deckManager.IsEveryCardFliped(rewardFlipCards)) { yield return(new WaitForSecondsRealtime(1f)); } // add reward & remove foreach (RewardFlipCard c in rewardFlipCards) { deckManager.AddToPool(c.reward); Destroy(c.gameObject); } // reverse scale for (int i = 0; i < frames; ++i) { rewardGridZone.parent.localScale = Vector3.Lerp(initScale, Vector3.zero, (float)(i + 1) / frames); yield return(null); } rewardGridZone.parent.localScale = initScale; rewardPanel.SetActive(false); timeEnded = false; lastDateUsed = DateTime.Now; }