/// <summary> /// First animation sequence, appearing and getting distance from source position /// </summary> /// <param name="_itemAnimationData"></param> /// <param name="_items"></param> /// <param name="_delay"></param> /// <returns></returns> private IEnumerator StartAppearing(ItemAnimation _itemAnimationData, List <ItemParticlesAnimation> _items, float _delay = 0.0f) { yield return(new WaitForSeconds(_delay)); for (int i = 0; i < _items.Count; i++) { if (i == 0) { Disc disc = _itemAnimationData.animationData.disc; _items[i].SetAppearingToPosition(_items[i].transform.position + (Vector3)Random.insideUnitCircle * (Random.Range(disc.radiusMin * disc.radiusFactor, disc.radiusMax * disc.radiusFactor))); } else { _items[i].SetAppearingToPosition(DispersionAroundCircle(_items[i].transform.position, _items[0].GetToPosition(), _items.Count, _itemAnimationData.animationData)); } _items[i].StartAppearing(); } yield return(new WaitForSeconds(_itemAnimationData.animationData.delayAppearing)); StartCoroutine(StartGrouping(_itemAnimationData, _items)); }
/// <summary> /// Second phase of animation, grouping toward destination /// </summary> /// <param name="_itemAnimationData"></param> /// <param name="_items"></param> /// <returns></returns> private IEnumerator StartGrouping(ItemAnimation _itemAnimationData, List <ItemParticlesAnimation> _items) { yield return(new WaitForSeconds(_itemAnimationData.animationData.delayAfterAppear)); for (int i = 0; i < _items.Count; i++) { if (_itemAnimationData.animationData.allTogether == false) { yield return(new WaitForSeconds(_itemAnimationData.animationData.delayBetweenRewards)); } _items[i].StartGrouping(_itemAnimationData.destination); } }
/// <summary> /// Call this to start a new Generic Reward Animation /// </summary> /// <param name="_animationElement"></param> /// <param name="_quantity"></param> /// <param name="_origin"></param> /// <param name="_destination"></param> /// <param name="_delay"></param> public Guid NewGenericRewardAnimation(Item _item, ItemAnimationData _itemAnimationScriptable, int _quantity, Vector3 _origin, Vector3 _destination, float _delay = 0) { if (_quantity <= 0) { return(Guid.Empty); } ItemAnimation itemAnimationData = new ItemAnimation() { guid = Guid.NewGuid(), itemId = _item.id, sprite = _item.icon, color = _item.color, animationData = _itemAnimationScriptable, quantity = _quantity, destination = _destination, compt = _quantity }; List <ItemParticlesAnimation> items = new List <ItemParticlesAnimation>(); ItemParticlesAnimation particle; for (int i = 0; i < _quantity; i++) { particle = GetUnusedOrCreate(); particle.transform.position = _origin; particle.transform.localScale = Vector3.zero; particle.itemAnimationData = itemAnimationData; particle.SetUp(); particle.gameObject.SetActive(true); items.Add(particle); } StartCoroutine(StartAppearing(itemAnimationData, items)); return(itemAnimationData.guid); }