public override List <LTDescr> Animate(GameEvent gameEvent)
    {
        MoveToTargetGameEvent targetGameEvent = (MoveToTargetGameEvent)gameEvent;
        Image createdMarker = Instantiate(ScoreProjectilePrefab, rect);

        createdMarker.color = gameObject.GetComponent <ColorizerHandler>().AssignedColor;
        RectTransform targetScoreRect = targetGameEvent.TargetRect;
        RectTransform markerRect      = createdMarker.rectTransform;

        Vector2 iconRadiusVector     = rect.localToWorldMatrix.MultiplyVector(new Vector2(rect.rect.width, rect.rect.height));
        float   iconRadius           = Mathf.Min(iconRadiusVector.x, iconRadiusVector.y) / 2;
        Vector2 targetDiameterVector = targetScoreRect.localToWorldMatrix.MultiplyVector(new Vector2(targetScoreRect.rect.width, targetScoreRect.rect.height));
        float   targetDiameter       = Mathf.Min(targetDiameterVector.x, targetDiameterVector.y);
        Vector2 markerDiameterVector = markerRect.localToWorldMatrix.MultiplyVector(new Vector2(markerRect.rect.width, markerRect.rect.height));
        float   markerDiameter       = Mathf.Min(markerDiameterVector.x, markerDiameterVector.y);

        markerRect.localScale = Vector3.zero;
        #region calculating tangent
        float r = targetDiameter / 2 * 1.1f;
        float x = rect.position.x;
        float y = rect.position.y + 1;

        //Todo fix tangent calculation
        float tangentY = (2 * r * r * y + Mathf.Sqrt(4 * r * r * r * r * y * y - 4 * (x * x + y * y) * (r * r * r * r - x * x * r * r))) / (2 * (x * x + y * y));
        float tangentX = Mathf.Sqrt(r * r - tangentY * tangentY);

        Vector3 targetTangent = new Vector3(
            x: tangentX + targetScoreRect.position.x,
            y: tangentY + targetScoreRect.position.y,
            z: targetScoreRect.position.z);
        #endregion

        float speed = Vector2.Distance(markerRect.position, targetTangent) / 0.5f;

        #region tweens
        LTDescr iconScaleDown = LeanTween.scale(
            rectTrans: rect,
            to: new Vector3(1.1f, 1.1f, 1.1f),
            time: 0.2f);
        LTDescr iconScaleUp = LeanTween.scale(
            rectTrans: rect,
            to: new Vector3(1f, 1f, 1f),
            time: 0.3f)
                              .setEaseOutBack()
                              .PlayAfter(iconScaleDown)
                              .SetCallEventOnStart(new GameEvent()
        {
            eventType = GameEvent.EventEnum.PlayPop
        });
        LTDescr markerScaleUp = LeanTween.scale(
            rectTrans: markerRect,
            to: Vector3.one,
            time: 0.3f)
                                .setEaseOutBack()
                                .PlayAfter(iconScaleDown);
        LTDescr markerMoveUp = LeanTweenHelper.Singleton.UIMoveRelative(
            rectTransform: markerRect,
            to: new Vector3(0, iconRadius + markerDiameter + 0.1f, 0),
            time: 0.2f)
                               .setEaseOutBack()
                               .PlayAfter(iconScaleDown);
        LTDescr markerMoveToTarget = LeanTweenHelper.Singleton.UIMove(
            rectTransform: markerRect,
            to: targetTangent,
            time: 0.5f)
                                     .SetCallEventOnStart(new GameEvent()
        {
            eventType = GameEvent.EventEnum.VoteRevealBubbleMove
        })
                                     .PlayAfter(markerMoveUp, IconCountTotal * OrderOffset + 0.0f);
        LTDescr markerScaleUpToTarget = LeanTween.scale(
            rectTrans: markerRect,
            to: new Vector3(targetDiameter / markerDiameter * 0.5f, targetDiameter / markerDiameter * 0.5f, targetDiameter / markerDiameter * 0.5f),
            time: 0.5f)
                                        .PlayAfter(markerMoveUp, IconCountTotal * OrderOffset + 0.0f);
        LTDescr markerOrbit = LeanTweenHelper.Singleton.DynamicOrbitAroundPoint(
            rectTransform: markerRect,
            center: targetScoreRect.position,
            radiusValueTween: LeanTween.value(targetDiameter * 1.1f, targetDiameter * 0.6f, 2).PlayAfter(markerMoveToTarget),
            radians: speed * (IconCountTotal * OrderOffset + 0.5f) * targetDiameter * 1.1f,
            time: (IconCountTotal * OrderOffset + 0.5f) * targetDiameter * 1.1f)
                              .PlayAfter(markerMoveToTarget);
        LTDescr markerFall = LeanTweenHelper.Singleton.UIMove(
            rectTransform: markerRect,
            to: targetScoreRect.position,
            time: 0.4f)
                             .setEaseOutBounce()
                             .PlayAfter(markerOrbit);
        LTDescr targetScaleUp = LeanTween.scale(
            rectTrans: targetScoreRect,
            to: new Vector3(1.1f, 1.1f, 1.1f),
            time: 0.5f)
                                .PlayAfter(markerFall, -0.5f);
        LTDescr targetScaleDown = LeanTween.scale(
            rectTrans: targetScoreRect,
            to: new Vector3(1f, 1f, 1f),
            time: 0.3f)
                                  .setEaseOutBack()
                                  .PlayAfter(targetScaleUp)
                                  .addOnStart(() => Destroy(createdMarker))
                                  .addOnStart(targetGameEvent.AnimationCompletedCallback)
                                  .SetCallEventOnStart(new GameEvent()
        {
            eventType = GameEvent.EventEnum.PlayPop
        });
        if (IconOrder == IconCountTotal)
        {
            targetScaleDown.SetCallEventOnComplete(new GameEvent()
            {
                eventType = GameEvent.EventEnum.CallShakeOrShowDelta
            });
        }


        #endregion

        List <LTDescr> animations = new List <LTDescr>()
        {
            iconScaleDown,
            iconScaleUp,
            markerScaleUp,
            markerMoveUp,
            markerMoveToTarget,
            markerScaleUpToTarget,
            markerOrbit,
            markerFall,
            targetScaleUp,
            targetScaleDown
        };
        return(animations);
    }