private double AimingPoints(HitJudgement judgement)
        {
            switch (judgement)
            {
            case HitJudgement.Hit300:
            case HitJudgement.Hit100:
            case HitJudgement.Hit50:
                return(PointsForJudgement(HitJudgement.Hit300));

            default:
                return(0);
            }
        }
        private double PointsForJudgement(HitJudgement judgement)
        {
            switch (judgement)
            {
            case HitJudgement.Hit300:
                return(300);

            case HitJudgement.Hit100:
                return(100);

            case HitJudgement.Hit50:
                return(50);

            default:
                return(0);
            }
        }
        public void ApplyHitJudgement(HitJudgement judgement)
        {
            ScoreObject currentObject = _remainingScoreObjects.FirstOrDefault();

            if (currentObject == null)
            {
                return;
            }
            _remainingScoreObjects.RemoveAt(0);

            if (ScoreStyle == ScoreStyle.V1)
            {
                double hitValue = AimingPoints(judgement) * currentObject.AimingDifficulty + ClickingPoints(judgement) * currentObject.ClickingDifficulty + ReadingPoints(judgement) * currentObject.ReadingDifficulty;

                // Mods multiplier is considered in difficulty multiplier
                Score += hitValue + hitValue * Combo / 100;
            }
            else if (ScoreStyle == ScoreStyle.V2)
            {
                //  aim => scales with hitrate (perhaps scale with max combo too?)
                //  click => scales with acc
                //  read => scales with acc
                _aimingPoints      += AimingPoints(judgement) * currentObject.AimingDifficulty;
                _maxAimingPoints   += AimingPoints(HitJudgement.Hit300) * currentObject.AimingDifficulty;
                _clickingPoints    += ClickingPoints(judgement) * currentObject.ClickingDifficulty;
                _maxClickingPoints += ClickingPoints(HitJudgement.Hit300) * currentObject.ClickingDifficulty;
                _readingPoints     += ReadingPoints(judgement) * currentObject.ReadingDifficulty;
                _maxReadingPoints  += ReadingPoints(HitJudgement.Hit300) * currentObject.ReadingDifficulty;

                // where aim, click and read are portions max possible performance
                Score = MaxScore * ((_aimingPoints / _maxAimingPoints) * AimingWeight + (_clickingPoints / _maxClickingPoints) * ClickingWeight + (_readingPoints / _maxReadingPoints) * ReadingWeight);
            }

            Combo++;
            MaxCombo++;
        }
 private double ReadingPoints(HitJudgement judgement)
 {
     return(PointsForJudgement(judgement));
 }