void TweenStart()
    {
        if (OneAtSameTime && !this.active)
        {
            Invoke("TweenStart", Time.fixedDeltaTime);
            return;
        }

        // Animation
        Vector3 position = ObjectToAnimate.position;

        TweenFactory.Tween("Up" + _id, position, PositionTop, GetFloat(TopAnimationTime), TweenScaleFunctions.SineEaseInOut, (t) =>
        {
            // progress
            ObjectToAnimate.position = GetPosition(t.CurrentValue);
        }, (t) =>
        {
            TweenFactory.Tween("Down" + _id, PositionTop, PositionBottom, GetFloat(TopBottomAnimationTime), TweenScaleFunctions.SineEaseInOut, (t1) =>
            {
                // progress
                ObjectToAnimate.position = GetPosition(t1.CurrentValue);
            }, (t1) =>
            {
                if (OneAtSameTime)
                {
                    TweenAnimationsManager.SetActiveNext();
                }
                Invoke("TweenStart", Time.fixedDeltaTime);
            });
        });
    }
 void Awake()
 {
     if (!_instance)
     {
         _instance = this;
     }
 }
 void OnDestroy()
 {
     TweenAnimationsManager.Remove(this);
     if (this.active)
     {
         TweenFactory.RemoveTweenKey("Up" + _id, TweenStopBehavior.DoNotModify);
         TweenFactory.RemoveTweenKey("Down" + _id, TweenStopBehavior.DoNotModify);
         TweenAnimationsManager.SetActiveNext();
     }
 }
 void Awake()
 {
     if (OneAtSameTime)
     {
         TweenAnimationsManager.Add(this);
         TweenAnimationsManager.SetMaxCounter(NumOfAnimationsBeforeNext);
         SetActive(TweenAnimationsManager.IsActive(this));
     }
     startingPosition = ObjectToAnimate.position;
     PositionTop     += startingPosition;
     PositionBottom  += startingPosition;
     _id = gameObject.GetInstanceID().ToString();
 }