public void CollectPlayerNote(NoteScript noteToStore)
    {
        // Calculate Score
        float          accuracyRating = Mathf.Abs(noteToStore.transform.position.x - selectors[noteToStore.noteTypeID].transform.position.x);
        AccuracyRating currRating     = AccuracyRating.OK;

        if (accuracyRating < encounterConstants.accuracyPerfect)
        {
            currRating = AccuracyRating.Perfect;
        }
        else if (accuracyRating < encounterConstants.accuracyGood)
        {
            currRating = AccuracyRating.Good;
        }

        Color  gradeColor      = encounterConstants.missedNoteColor;
        Sprite noteSprite      = noteOK;
        int    scoreMultiplier = 0;

        switch (currRating)
        {
        case AccuracyRating.Perfect:
            gradeColor      = encounterConstants.PlayerGradeColors[0];
            noteSprite      = notePerfect;
            scoreMultiplier = encounterConstants.scorePerfectMultiplier;

            audioManager.PlaySoundEffect(SoundEffects.Perfect);
            break;

        case AccuracyRating.Good:
            gradeColor      = encounterConstants.PlayerGradeColors[1];
            noteSprite      = noteGood;
            scoreMultiplier = encounterConstants.scoreGoodMultiplier;

            audioManager.PlaySoundEffect(SoundEffects.Good);
            break;

        case AccuracyRating.OK:
            gradeColor      = encounterConstants.PlayerGradeColors[2];
            noteSprite      = noteOK;
            scoreMultiplier = encounterConstants.scoreOKMultiplier;
            break;
        }

        float score = (scoreMultiplier * playerMoves[currentPlayer][currentMove].score);

        if (currentState == NotesGameStates.Hyped)
        {
            score *= 2;
        }
        else
        {
            if (gameManager.movesActive[MoveEffects.Amplifier])
            {
                gameManager.AnimateEffectAction(MoveEffects.Amplifier);
                score *= encounterConstants.amplifierMultiplier;
            }
        }


        if (currentState == NotesGameStates.Playing)
        {
            hypeMeterUI.IncrementHypeValue((int)playerMoves[currentPlayer][currentMove].hypeRate);
        }
        gameManager.TurnScoreIncrement((int)score);

        audioManager.PlayMusicEffect(MusicEffects.PlayerCorrect, currentPlayer);
        noteToStore.PlaySuccessAnimation(gradeColor, noteSprite);
    }
    public void CollectEnemyNote(NoteScript noteToStore)
    {
        bool hasMissed = false; // Set to true for move effect

        // Calculate random accuracy
        float accuracyRating = UnityEngine.Random.Range(10 * (1 - encounterConstants.enemyDifficulty), 100f - (20 * encounterConstants.enemyDifficulty));

        AccuracyRating currRating = AccuracyRating.OK;

        if (accuracyRating < encounterConstants.accuracyPerfect)
        {
            currRating = AccuracyRating.Perfect;
        }
        else if (accuracyRating < encounterConstants.accuracyGood)
        {
            currRating = AccuracyRating.Good;
        }
        else
        {
            if (accuracyRating > encounterConstants.enemyMissThreshold)
            {
                hasMissed = true;
            }
        }

        Color  gradeColor     = encounterConstants.missedNoteColor;
        int    scoreDecrement = 0;
        Sprite noteSprite     = noteOK;

        switch (currRating)
        {
        case AccuracyRating.Perfect:
            gradeColor     = encounterConstants.EnemyGradeColors[0];
            noteSprite     = notePerfect;
            scoreDecrement = encounterConstants.scorePerfectMultiplier;

            audioManager.PlaySoundEffect(SoundEffects.Perfect);
            break;

        case AccuracyRating.Good:
            gradeColor     = encounterConstants.EnemyGradeColors[1];
            noteSprite     = noteGood;
            scoreDecrement = encounterConstants.scoreGoodMultiplier;

            audioManager.PlaySoundEffect(SoundEffects.Good);
            break;

        case AccuracyRating.OK:
            gradeColor     = encounterConstants.EnemyGradeColors[2];
            noteSprite     = noteOK;
            scoreDecrement = encounterConstants.scoreOKMultiplier;
            break;
        }

        // Add handicap based on difficulty
        if (!hasMissed)
        {
            float handicapScore = scoreDecrement - (scoreDecrement * (0.2f * (1f - encounterConstants.enemyDifficulty)));

            if (gameManager.movesActive[MoveEffects.Rhythm])
            {
                gameManager.AnimateEffectAction(MoveEffects.Rhythm);
                handicapScore *= encounterConstants.rhythmMultiplier;
            }

            noteToStore.PlaySuccessAnimation(gradeColor, noteSprite);
            gameManager.EnemyScoreDecrement((int)handicapScore);
        }
        else
        {
            noteToStore.isCollected = true;
            noteToStore.PlayFailureAnimation();
        }
    }