Beispiel #1
0
        private static string RenderBeatmapCategories(IEnumerable <Issue> aBeatmapIssues, string aVersion, bool aGeneral = false)
        {
            return
                (Div("card-difficulty-checks",
                     CheckerRegistry.GetChecks()
                     .Where(aCheck => aGeneral == aCheck is GeneralCheck)
                     .GroupBy(aCheck => aCheck.GetMetadata().Category)
                     .Select(aGroup =>
            {
                string category = aGroup.Key;
                IEnumerable <Issue> issues = aBeatmapIssues.Where(anIssue => anIssue.CheckOrigin.GetMetadata().Category == category);

                return
                DivAttr("card",
                        DataAttr("difficulty", aVersion),
                        Div("card-box shadow noselect",
                            Div("large-icon " + GetIcon(issues) + "-icon"),
                            Div("card-title",
                                Encode(category)
                                )
                            ),
                        Div("card-details-container",
                            Div("card-details",
                                RenderBeatmapIssues(issues, category, aGeneral)
                                )
                            )
                        );
            }).ToArray()
                     ));
        }
Beispiel #2
0
        public static string Render(string aCheckMessage)
        {
            Check check =
                CheckerRegistry.GetChecks()
                .FirstOrDefault(aCheck => aCheck.GetMetadata().Message == aCheckMessage);

            if (check?.GetMetadata() == null)
            {
                return("No documentation found for check with message \"" + aCheckMessage + "\".");
            }

            return(String.Concat(
                       RenderOverlayTop(check.GetMetadata()),
                       RenderOverlayContent(check)));
        }
Beispiel #3
0
        private static string RenderBeatmapIssues(IEnumerable <Issue> aCategoryIssues, string aCategory, bool aGeneral = false)
        {
            return
                (String.Concat(
                     CheckerRegistry.GetChecks()
                     .Where(aCheck =>
                            aCheck.GetMetadata().Category == aCategory &&
                            aGeneral == aCheck is GeneralCheck)
                     .Select(aCheck =>
            {
                BeatmapCheckMetadata metadata = aCheck.GetMetadata() as BeatmapCheckMetadata;
                IEnumerable <Issue> issues = aCategoryIssues.Where(anIssue => anIssue.CheckOrigin == aCheck);

                string message = aCheck.GetMetadata().Message;

                return
                DivAttr("card-detail",
                        (metadata != null ? DifficultiesDataAttr(metadata.Difficulties) : "") +
                        " data-check=\"" + Encode(message) + "\"",
                        Div("card-detail-icon " + GetIcon(issues) + "-icon"),
                        (issues.Any() ?
                         Div("",
                             Div("card-detail-text",
                                 message
                                 ),
                             DivAttr("vertical-arrow card-detail-toggle detail-shortcut",
                                     Tooltip("Toggle details")
                                     )
                             ) :
                         Div("card-detail-text",
                             message
                             )),
                        DivAttr("doc-shortcut detail-shortcut",
                                Tooltip("Show documentation")
                                )
                        ) +
                RenderBeatmapDetails(issues);
            })));
        }
Beispiel #4
0
        private static string RenderChecks()
        {
            List <Check> checks = CheckerRegistry.GetChecks();

            IEnumerable <Check> generalChecks = checks.Where(aCheck => aCheck is GeneralCheck);

            IEnumerable <Check> allModeChecks = checks.Where(aCheck =>
            {
                BeatmapCheckMetadata metadata = aCheck.GetMetadata() as BeatmapCheckMetadata;

                if (metadata == null)
                {
                    return(false);
                }

                return
                (metadata.Modes.Contains(Beatmap.Mode.Standard) &&
                 metadata.Modes.Contains(Beatmap.Mode.Taiko) &&
                 metadata.Modes.Contains(Beatmap.Mode.Catch) &&
                 metadata.Modes.Contains(Beatmap.Mode.Mania));
            });

            bool hasMode(Check aCheck, Beatmap.Mode aMode) => (aCheck.GetMetadata() as BeatmapCheckMetadata)?.Modes.Contains(aMode) ?? false;

            IEnumerable <Check> standardChecks = checks.Where(aCheck => hasMode(aCheck, Beatmap.Mode.Standard)).Except(allModeChecks).Except(generalChecks);
            IEnumerable <Check> catchChecks    = checks.Where(aCheck => hasMode(aCheck, Beatmap.Mode.Taiko)).Except(allModeChecks).Except(generalChecks);
            IEnumerable <Check> taikoChecks    = checks.Where(aCheck => hasMode(aCheck, Beatmap.Mode.Catch)).Except(allModeChecks).Except(generalChecks);
            IEnumerable <Check> maniaChecks    = checks.Where(aCheck => hasMode(aCheck, Beatmap.Mode.Mania)).Except(allModeChecks).Except(generalChecks);

            return
                (RenderModeCategory("General", generalChecks) +
                 RenderModeCategory("All Modes", allModeChecks) +
                 RenderModeCategory("Standard", standardChecks) +
                 RenderModeCategory("Taiko", catchChecks) +
                 RenderModeCategory("Catch", taikoChecks) +
                 RenderModeCategory("Mania", maniaChecks));
        }
Beispiel #5
0
 public static void Run()
 {
     CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture;
     CheckerRegistry.RegisterCheck(new CheckSliderOnly());
 }
Beispiel #6
0
        /// <summary> Needs to be exactly "public static void Run()". This is the start point of the program,
        /// which is executed from the MapsetVerifier application when its .dll file is provided in "/checks". </summary>
        public static void Run()
        {
            // Ensures that numbers are displayed consistently across cultures, for example
            // that decimals are indicated by a period and not a comma.
            CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture;

            // CheckerRegistry is what MapsetVerifier uses to determine which checks to run, so by adding an
            // instance of a check to it, it will be executed and loaded exactly like any other check.

            // General > Audio
            CheckerRegistry.RegisterCheck(new CheckAudioInVideo());
            CheckerRegistry.RegisterCheck(new CheckBitrate());
            CheckerRegistry.RegisterCheck(new CheckHitSoundDelay());
            CheckerRegistry.RegisterCheck(new CheckHitSoundFormat());
            CheckerRegistry.RegisterCheck(new CheckHitSoundImbalance());
            CheckerRegistry.RegisterCheck(new CheckHitSoundLength());
            CheckerRegistry.RegisterCheck(new CheckMultipleAudio());

            // General > Files
            CheckerRegistry.RegisterCheck(new CheckUnusedFiles());
            CheckerRegistry.RegisterCheck(new CheckUpdateValidity());
            CheckerRegistry.RegisterCheck(new CheckZeroBytes());

            // General > Metadata
            CheckerRegistry.RegisterCheck(new CheckAdditionalMarkers());
            CheckerRegistry.RegisterCheck(new CheckInconsistentMetadata());
            CheckerRegistry.RegisterCheck(new CheckMarkerFormat());
            CheckerRegistry.RegisterCheck(new CheckMarkerSpacing());
            CheckerRegistry.RegisterCheck(new CheckUnicode());
            CheckerRegistry.RegisterCheck(new CheckVersionFormat());

            // General > Resources
            CheckerRegistry.RegisterCheck(new CheckBgPresence());
            CheckerRegistry.RegisterCheck(new CheckBgResolution());
            CheckerRegistry.RegisterCheck(new CheckMultipleVideo());
            CheckerRegistry.RegisterCheck(new CheckSpriteResolution());
            CheckerRegistry.RegisterCheck(new CheckVideoOffset());
            CheckerRegistry.RegisterCheck(new CheckVideoResolution());

            // All Modes > Compose
            CheckerRegistry.RegisterCheck(new CheckAbnormalNodes());
            CheckerRegistry.RegisterCheck(new CheckAudioUsage());
            CheckerRegistry.RegisterCheck(new CheckConcurrent());
            CheckerRegistry.RegisterCheck(new CheckDrainTime());
            CheckerRegistry.RegisterCheck(new CheckInvisibleSlider());

            // All Modes > Events
            CheckerRegistry.RegisterCheck(new CheckBreaks());
            CheckerRegistry.RegisterCheck(new CheckStoryHitSounds());

            // All Modes > Hit Sounds
            CheckerRegistry.RegisterCheck(new CheckHitSounds());
            CheckerRegistry.RegisterCheck(new CheckMuted());

            // All Modes > Settings
            CheckerRegistry.RegisterCheck(new CheckDiffSettings());
            CheckerRegistry.RegisterCheck(new CheckInconsistentSettings());
            CheckerRegistry.RegisterCheck(new CheckTickRate());

            // All Modes > Spread
            CheckerRegistry.RegisterCheck(new CheckLowestDiff());

            // All Modes > Timing
            CheckerRegistry.RegisterCheck(new CheckBehindLine());
            CheckerRegistry.RegisterCheck(new CheckConcurrentLines());
            CheckerRegistry.RegisterCheck(new CheckFirstLine());
            CheckerRegistry.RegisterCheck(new CheckInconsistentLines());
            CheckerRegistry.RegisterCheck(new CheckKiaiUnsnap());
            CheckerRegistry.RegisterCheck(new CheckPreview());
            CheckerRegistry.RegisterCheck(new CheckUnsnaps());
            CheckerRegistry.RegisterCheck(new CheckUnusedLines());
            CheckerRegistry.RegisterCheck(new CheckWrongSnapping());

            // Standard > Compose
            CheckerRegistry.RegisterCheck(new CheckAmbiguity());
            CheckerRegistry.RegisterCheck(new CheckBurai());
            CheckerRegistry.RegisterCheck(new CheckNinjaSpinner());
            CheckerRegistry.RegisterCheck(new CheckObscuredReverse());
            CheckerRegistry.RegisterCheck(new CheckOffscreen());

            // Standard > Settings
            CheckerRegistry.RegisterCheck(new CheckDefaultColours());
            CheckerRegistry.RegisterCheck(new CheckLuminosity());

            // Standard > Spread
            CheckerRegistry.RegisterCheck(new CheckCloseOverlap());
            CheckerRegistry.RegisterCheck(new CheckMultipleReverses());
            CheckerRegistry.RegisterCheck(new CheckShortSliders());
            CheckerRegistry.RegisterCheck(new CheckSpaceVariation());
            CheckerRegistry.RegisterCheck(new CheckSpinnerRecovery());
            CheckerRegistry.RegisterCheck(new CheckStackLeniency());
        }