public ResourceAnimation animate(List <Sprite> sprites, Sprite borders, Color color, bool grayscale, Vector2 sourceScreenPos, Vector2 targetScreenPos, double resourceAmount, int spriteAmount, float durationMin, float durationMax, float localScaleMin, float localScaleMax, float maxOffsetDistance, bool fromMenu, Action <int, int, double, bool> endCallback, [Optional, DefaultParameterValue(-1)] int siblingIndex)
        {
            spriteAmount = Mathf.Clamp(spriteAmount, 0, 0x30);
            ResourceAnimation item = this.m_resourceAnimationPool.getObject();

            for (int i = 0; i < spriteAmount; i++)
            {
                Vector3           vector;
                ResourceGainImage image = Binder.ResourceGainImagePool.getObject();
                image.transform.SetParent(this.RootTm);
                if (siblingIndex != -1)
                {
                    image.transform.SetSiblingIndex(siblingIndex);
                }
                else
                {
                    image.transform.SetAsLastSibling();
                }
                image.Image.sprite    = LangUtil.GetRandomValueFromList <Sprite>(sprites);
                image.Borders.sprite  = borders;
                image.Borders.enabled = borders != null;
                image.Image.color     = color;
                image.Image.material  = !grayscale ? null : Binder.DisabledUiMaterial;
                if (image.Borders != null)
                {
                    image.Borders.color    = image.Image.color;
                    image.Borders.material = image.Image.material;
                }
                image.gameObject.SetActive(true);
                item.ImageTm[i]            = image.transform;
                item.Image[i]              = image;
                item.ImageTm[i].localScale = (Vector3)(Vector3.one * UnityEngine.Random.Range(localScaleMin, localScaleMax));
                item.SourceScreenPos[i]    = sourceScreenPos;
                item.TargetScreenPos[i]    = targetScreenPos;
                RectTransformUtility.ScreenPointToWorldPointInRectangle(this.RootTm, sourceScreenPos, this.m_canvasCam, out vector);
                image.transform.position      = vector;
                image.transform.localRotation = (spriteAmount <= 1) ? Quaternion.identity : Quaternion.Euler(0f, 0f, UnityEngine.Random.Range((float)-10f, (float)10f));
                Vector2 v    = sourceScreenPos - targetScreenPos;
                Vector2 zero = Vector2.zero;
                float   num2 = (UnityEngine.Random.Range(0, 2) != 0) ? 1f : -1f;
                float   max  = maxOffsetDistance * (((float)Screen.width) / 1242f);
                zero   = (Vector2)(Vector2Extensions.Rotate(v, num2 * 90f).normalized *UnityEngine.Random.Range(0f, max));
                zero.y = UnityEngine.Random.Range(zero.x, -zero.x);
                item.OffsetScreen[i] = zero;
                item.Lifetime[i]     = UnityEngine.Random.Range(durationMin, durationMax);
                item.ElapsedTime[i]  = 0f;
            }
            item.NumSprites = spriteAmount;
            item.TranslationEasingFunction = Easing.Function.IN_CUBIC;
            item.EndCallback = endCallback;
            item.FromMenu    = fromMenu;
            MathUtil.DistributeValuesIntoChunksDouble(resourceAmount, spriteAmount, ref item.ResourceChunks);
            item.ResourceChunkIndex = 0;
            this.m_activeResourceAnimations.Add(item);
            return(item);
        }
 public void emptyAllActiveAnimationResourceChunks()
 {
     for (int i = 0; i < this.m_activeResourceAnimations.Count; i++)
     {
         ResourceAnimation animation = this.m_activeResourceAnimations[i];
         for (int j = 0; j < animation.ResourceChunks.Count; j++)
         {
             animation.ResourceChunks[j] = 0.0;
         }
     }
 }
 protected void Update()
 {
     for (int i = this.m_activeResourceAnimations.Count - 1; i >= 0; i--)
     {
         ResourceAnimation item = this.m_activeResourceAnimations[i];
         bool   flag            = true;
         int    num2            = 0;
         double num3            = 0.0;
         for (int j = 0; j < item.NumSprites; j++)
         {
             if (!item.CleanupFlag[j])
             {
                 Vector3 vector2;
                 item.ElapsedTime[j] += Time.unscaledDeltaTime;
                 float   v           = Mathf.Clamp01(item.ElapsedTime[j] / item.Lifetime[j]);
                 float   t           = Easing.Apply(v, item.TranslationEasingFunction);
                 Vector2 screenPoint = Vector2.Lerp(item.SourceScreenPos[j], item.TargetScreenPos[j], t) + ((Vector2)(item.OffsetScreen[j] * Mathf.Sin(v * 3.141593f)));
                 RectTransformUtility.ScreenPointToWorldPointInRectangle(this.RootTm, screenPoint, this.m_canvasCam, out vector2);
                 item.ImageTm[j].position = vector2;
                 if (item.ElapsedTime[j] > item.Lifetime[j])
                 {
                     item.CleanupFlag[j] = true;
                     Binder.ResourceGainImagePool.returnObject(item.Image[j]);
                     item.Image[j] = null;
                     num2++;
                     num3 += item.ResourceChunks[item.ResourceChunkIndex++];
                 }
                 else
                 {
                     flag = false;
                 }
             }
         }
         if ((num2 > 0) && (item.EndCallback != null))
         {
             item.EndCallback(num2, item.NumSprites, num3, item.FromMenu);
         }
         if (flag)
         {
             this.m_activeResourceAnimations.Remove(item);
             this.m_resourceAnimationPool.returnObject(item);
         }
     }
 }