public void DoEndGameTransition()
    {
        var rect = PointsText.GetComponent <RectTransform>();

        // "Complicated" tweening with parameters is a pita, especially when the objects have been separated...
        //   why did i do that.
        // Comments are execution intervals i.e. all code in 2. executes at the same time.
        var seq = DOTween.Sequence();

        // 1.
        seq.Append(rect.DOScale(0, PointsTextEndEaseDuration).SetEase(PointsTextEndEaseOut));
        // 2.
        seq.AppendCallback(() => {
            UpgradeBar.Appear();
            rect.anchoredPosition = PointsTextEndPosition;
        });
        seq.Append(rect.DOScale(1, PointsTextEndEaseDuration).SetEase(PointsTextEndEaseIn));
        // 3.
        seq.AppendCallback(() => {
            float upgradeDuration = UpgradeBar.PerformFill(points);
            DOTween.To(() => points, x => {
                points = x;
                UpdateText();
            }, 0, upgradeDuration)
            .SetEase(PointsTextDiminishEase)
            .OnComplete(OnFinishLevelingTick);
        });

        seq.Play();
    }