public void Progress(GameObject root, TimeSpan duration)
        {
            if (progressMap.ContainsKey(root))
            {
                Stop(root);
            }

            var indicator     = pool.Rent();
            var indicatorRoot = indicator.transform;
            var delay         = (float)duration.TotalSeconds;
            var tweener       = DOTween
                                .To(() => 0f, value => indicator.Progress(value, 1f), 1f, delay);

            indicatorRoot.parent        = root.transform;
            indicatorRoot.localPosition = Vector3.zero;

            progressMap[root] = new ProgressArgs(indicator, tweener);
        }