Exemplo n.º 1
0
        public override IEnumerable <Issue> GetIssues(Beatmap beatmap)
        {
            var catchObjectManager = new ObjectManager();
            var catchObjects       = catchObjectManager.LoadBeatmap(beatmap);

            catchObjectManager.CalculateJumps(catchObjects, beatmap);

            var issueObjects = new List <CatchHitObject>();

            foreach (var currentObject in catchObjects
                     .Where(currentObject => currentObject.type != HitObject.Type.Spinner && !currentObject.IsHyperDash))
            {
                var hyperDistance = Math.Floor(currentObject.DistanceToHyperDash);

                if (hyperDistance >= 1)
                {
                    issueObjects.Add(currentObject);
                }

                if (currentObject.Extras == null)
                {
                    continue;
                }

                foreach (var currentObjectExtra in currentObject.Extras)
                {
                    var extraHyperDistance = Math.Floor(currentObjectExtra.DistanceToHyperDash);

                    if (!currentObjectExtra.IsHyperDash && extraHyperDistance >= 1)
                    {
                        issueObjects.Add(currentObjectExtra);
                    }
                }
            }

            foreach (var issueObject in issueObjects)
            {
                if (issueObject.DistanceToHyperDash < 5)
                {
                    yield return(EdgeDashIssue(GetTemplate(EdgeDash), beatmap, issueObject, Beatmap.Difficulty.Insane));

                    yield return(EdgeDashIssue(GetTemplate(EdgeDashMinor), beatmap, issueObject, Beatmap.Difficulty.Expert, Beatmap.Difficulty.Ultra));
                }

                if (issueObject.DistanceToHyperDash < 10)
                {
                    yield return(EdgeDashIssue(GetTemplate(EdgeDashProblem), beatmap, issueObject, Beatmap.Difficulty.Normal, Beatmap.Difficulty.Hard));
                }
            }
        }
Exemplo n.º 2
0
        public override IEnumerable <Issue> GetIssues(Beatmap beatmap)
        {
            var catchObjectManager = new ObjectManager();
            var catchObjects       = catchObjectManager.LoadBeatmap(beatmap);

            catchObjectManager.CalculateJumps(catchObjects, beatmap);

            foreach (var currentObject in catchObjects
                     .Where(currentObject => currentObject.type != HitObject.Type.Spinner && !currentObject.IsWalkable && !currentObject.IsHyperDash))
            {
                yield return(new Issue(
                                 GetTemplate(ContainsDash),
                                 beatmap,
                                 Timestamp.Get(currentObject.time)
                                 ).ForDifficulties(Beatmap.Difficulty.Easy));
            }
        }
Exemplo n.º 3
0
        public override IEnumerable <Issue> GetIssues(Beatmap beatmap)
        {
            var catchObjectManager = new ObjectManager();
            var catchObjects       = catchObjectManager.LoadBeatmap(beatmap);

            catchObjectManager.CalculateJumps(catchObjects, beatmap);

            CatchHitObject checkingObject = null;

            if (catchObjects.Count == 0)
            {
                yield break;
            }

            for (var i = 1; i < catchObjects.Count; i++)
            {
                var currentObject = catchObjects[i];

                if (checkingObject == null)
                {
                    checkingObject = catchObjects[i - 1];
                }

                if (checkingObject.IsHyperDash)
                {
                    var snap = currentObject.time - checkingObject.time;

                    if (snap < ThresholdH)
                    {
                        yield return(new Issue(
                                         GetTemplate(HyperdashSnap),
                                         beatmap,
                                         Timestamp.Get(currentObject.time)
                                         ).ForDifficulties(Beatmap.Difficulty.Hard));
                    }

                    if (snap < ThresholdI)
                    {
                        yield return(new Issue(
                                         GetTemplate(HyperdashSnap),
                                         beatmap,
                                         Timestamp.Get(currentObject.time)
                                         ).ForDifficulties(Beatmap.Difficulty.Insane));
                    }
                }

                checkingObject = currentObject;

                //Check snaps for slider parts
                foreach (var currentObjectExtra in currentObject.Extras)
                {
                    if (checkingObject.IsHyperDash)
                    {
                        var snap = currentObjectExtra.time - checkingObject.time;

                        if (snap < ThresholdI)
                        {
                            yield return(new Issue(
                                             GetTemplate(HyperdashSnap),
                                             beatmap,
                                             Timestamp.Get(currentObject.time)
                                             ).ForDifficulties(Beatmap.Difficulty.Insane));
                        }
                    }

                    checkingObject = currentObject;
                }
            }
        }
Exemplo n.º 4
0
        public override IEnumerable <Issue> GetIssues(Beatmap beatmap)
        {
            var diff       = beatmap.GetDifficulty();
            var diffByName = beatmap.GetDifficulty(true);

            if (diff == Beatmap.Difficulty.Expert || diff == Beatmap.Difficulty.Ultra || diffByName == Beatmap.Difficulty.Expert)
            {
                yield break;
            }

            var catchObjectManager = new ObjectManager();
            var catchObjects       = catchObjectManager.LoadBeatmap(beatmap);

            catchObjectManager.LoadOrigins(catchObjects);

            catchObjectManager.CalculateJumps(catchObjects, beatmap);

            foreach (var currentObject in catchObjects)
            {
                if (currentObject.Origin == null || currentObject.type == HitObject.Type.Spinner)
                {
                    continue;
                }

                var currentCheckingObject = currentObject;

                if (currentCheckingObject.Origin.IsHyperDash)
                {
                    yield return(new Issue(
                                     GetTemplate(ContainsHyperdash),
                                     beatmap,
                                     Timestamp.Get(currentCheckingObject.Origin.time)
                                     ).ForDifficulties(Beatmap.Difficulty.Easy, Beatmap.Difficulty.Normal));
                }

                foreach (var currentObjectExtra in currentObject.Extras)
                {
                    currentCheckingObject = currentObjectExtra;

                    if (!currentCheckingObject.Origin.IsHyperDash)
                    {
                        continue;
                    }

                    yield return(new Issue(
                                     GetTemplate(ContainsHyperdash),
                                     beatmap,
                                     Timestamp.Get(currentCheckingObject.Origin.time)
                                     ).ForDifficulties(Beatmap.Difficulty.Easy, Beatmap.Difficulty.Normal));

                    yield return(new Issue(
                                     GetTemplate(ContainsHyperdashExtra),
                                     beatmap,
                                     Timestamp.Get(currentCheckingObject.Origin.time)
                                     ).ForDifficulties(Beatmap.Difficulty.Hard));

                    yield return(new Issue(
                                     GetTemplate(ContainsHyperdashExtraRain),
                                     beatmap,
                                     Timestamp.Get(currentCheckingObject.Origin.time)
                                     ).ForDifficulties(Beatmap.Difficulty.Insane));
                }
            }
        }
Exemplo n.º 5
0
        public override IEnumerable <Issue> GetIssues(Beatmap beatmap)
        {
            var catchObjectManager = new ObjectManager();
            var catchObjects       = catchObjectManager.LoadBeatmap(beatmap);

            catchObjectManager.CalculateJumps(catchObjects, beatmap);

            var            count              = 0;
            CatchHitObject firstHyperdash     = null;
            CatchHitObject lastObject         = null;
            var            nextMustBeSameSnap = false;

            foreach (var currentObject in catchObjects)
            {
                if (nextMustBeSameSnap)
                {
                    if (lastObject.Extras == null)
                    {
                        var originTime = Math.Abs(lastObject.time - currentObject.time);
                        var time       = Math.Abs(currentObject.GetPrevDeltaTime());

                        //TODO recognize normal dashes
                        if ((originTime > time + 5 || originTime < time - 5) && lastObject.IsHyperDash)
                        {
                            yield return(new Issue(
                                             GetTemplate(ConsecutivePlatterSnap),
                                             beatmap,
                                             Timestamp.Get(currentObject.time)
                                             ).ForDifficulties(Beatmap.Difficulty.Hard));

                            yield return(new Issue(
                                             GetTemplate(ConsecutiveRainSnap),
                                             beatmap,
                                             Timestamp.Get(currentObject.time)
                                             ).ForDifficulties(Beatmap.Difficulty.Insane));
                        }
                    }

                    nextMustBeSameSnap = false;
                }

                // Check if we came from a hyperdash
                if (firstHyperdash != null)
                {
                    // Check if it was highersnapped for platter/rain rule
                    if (currentObject.IsHigherSnapped(Beatmap.Difficulty.Hard, lastObject.IsHyperDash) ||
                        currentObject.IsHigherSnapped(Beatmap.Difficulty.Insane, lastObject.IsHyperDash))
                    {
                        nextMustBeSameSnap = true;
                    }
                }

                if (currentObject.IsHyperDash)
                {
                    count++;
                    lastObject = currentObject;

                    if (firstHyperdash == null)
                    {
                        firstHyperdash = currentObject;
                    }

                    continue;
                }

                // No more hdashes check
                if (count > ThresholdPlatter)
                {
                    yield return(new Issue(
                                     GetTemplate(Consecutive),
                                     beatmap,
                                     Timestamp.Get(lastObject.time),
                                     ThresholdPlatter,
                                     count
                                     ).ForDifficulties(Beatmap.Difficulty.Hard));
                }

                if (count > ThresholdRain)
                {
                    yield return(new Issue(
                                     GetTemplate(Consecutive),
                                     beatmap,
                                     Timestamp.Get(lastObject.time),
                                     ThresholdRain,
                                     count
                                     ).ForDifficulties(Beatmap.Difficulty.Insane));
                }

                count          = 0;
                firstHyperdash = null;
            }
        }