void InitializeStates()
    {
        var eyeConstraints = GetComponentsInChildren <SkeletonUtilityEyeConstraint>();

        var idleAnimator            = new IdleAnimationController(_stableAnimationTrack, _skeletonAnimation, Parameters, _audioSource);
        var walkAnimator            = new SingleAnimationStateController(_stableAnimationTrack, _skeletonAnimation, Parameters, Parameters.StandardWalkAnimation, canFlipSprite: true, isSidewaysAnimation: true);
        var chaseConsumableAnimator = new ChaseConsumableAnimationController(_stableAnimationTrack, _skeletonAnimation, Parameters, eyeConstraints);
        var cuddleAnimator          = new CuddleAnimationController(_stableAnimationTrack, _skeletonAnimation, Parameters, _audioSource);
        var drawingAnimator         = new DrawLetterAnimationController(_stableAnimationTrack, _skeletonAnimation, Parameters, _audioSource);

        _stateMachine.AddState(StableAnimationState.Idle, idleAnimator);
        _stateMachine.AddState(StableAnimationState.Walk, walkAnimator);
        _stateMachine.AddState(StableAnimationState.ChaseConsumable, chaseConsumableAnimator);
        _stateMachine.AddState(StableAnimationState.Cuddling, cuddleAnimator);
        _stateMachine.AddState(StableAnimationState.Drawing, drawingAnimator);
    }
    public void StartActivity(DrawLetterAnimationController drawingAnimations, LetterPrefabReference requestedLetter, int maxAttempts, int sensitivity)
    {
        var canvas = InstantiateCanvas(Position.x, _root);
        var sprite = canvas.transform.GetChild(0);

        _requestedLetter      = requestedLetter;
        _maxAttempts          = maxAttempts;
        _attemptCounter       = canvas.GetComponentInChildren <AttemptCounter>();
        _gestureScript        = new Gesture(_root, sensitivity);
        _drawletterAnimations = drawingAnimations;

        _gestureScript.LettersToMatch = new Letter[] { requestedLetter.Letter };
        _ressi.TouchInteractions.OverrideInputChain(_gestureScript);
        _gestureScript.OnGestureComplete += ValidateDrawing;

        _canvasTrigger.StartCoroutine(WaitForCanvasAppearance(sprite));
    }