public void StartAnimation(Player player, Field targetField)
 {
     _player         = player;
     _targetField    = targetField;
     _playerPosition = _player.transform.position;
     _animationStep  = TowerAnimationStep.JumpOnTower1;
     _moveTimer      = 0f;
 }
    private void LerpTo(Vector3 start, Vector3 end, TowerAnimationStep nextStep)
    {
        _player.transform.position = Vector3.Lerp(start, end, _moveTimer);
        _moveTimer += Player.LerpingModifier * Time.deltaTime;

        if (_moveTimer >= 1f)
        {
            _animationStep = nextStep;
            _moveTimer     = 0f;
        }
    }
    private void Update()
    {
        if (_animationStep == TowerAnimationStep.Idle)
        {
            return;
        }

        if (_animationStep == TowerAnimationStep.JumpOnTower1)
        {
            var pA = _playerPosition;
            var pB = towerPosition.position;
            var d  = Vector3.Distance(pA, pB);
            var m  = (pA + pB) / 2;
            var h  = d * .3f;
            var q1 = m + new Vector3(0, h, 0);

            LerpTo(pA, q1, TowerAnimationStep.JumpOnTower2);
            return;
        }

        if (_animationStep == TowerAnimationStep.JumpOnTower2)
        {
            var pA = _playerPosition;
            var pB = towerPosition.position;
            var d  = Vector3.Distance(pA, pB);
            var m  = (pA + pB) / 2;
            var h  = d * .3f;
            var q1 = m + new Vector3(0, h, 0);

            LerpTo(q1, pB, TowerAnimationStep.MoveToField);
            return;
        }

        Game.Instance.GetWalkAudio().Play();
        Game.Instance.StopWaiting();

        _player.RegisterMovementFinishedCallback(() => { Game.Instance.HandleFinishedMovement(_player); });
        _player.SetField(_targetField);

        _animationStep = TowerAnimationStep.Idle;
    }