Пример #1
0
        protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills, double clockRate)
        {
            if (beatmap.HitObjects.Count == 0)
            {
                return new ManiaDifficultyAttributes {
                           Mods = mods
                }
            }
            ;

            HitWindows hitWindows = new ManiaHitWindows();

            hitWindows.SetDifficulty(beatmap.Difficulty.OverallDifficulty);

            return(new ManiaDifficultyAttributes
            {
                StarRating = skills[0].DifficultyValue() * star_scaling_factor,
                Mods = mods,
                // In osu-stable mania, rate-adjustment mods don't affect the hit window.
                // This is done the way it is to introduce fractional differences in order to match osu-stable for the time being.
                GreatHitWindow = Math.Ceiling((int)(getHitWindow300(mods) * clockRate) / clockRate),
                ScoreMultiplier = getScoreMultiplier(mods),
                MaxCombo = beatmap.HitObjects.Sum(maxComboForObject)
            });
        }
Пример #2
0
        protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills, double clockRate)
        {
            if (beatmap.HitObjects.Count == 0)
            {
                return new ManiaDifficultyAttributes {
                           Mods = mods, Skills = skills
                }
            }
            ;

            HitWindows hitWindows = new ManiaHitWindows();

            hitWindows.SetDifficulty(beatmap.BeatmapInfo.BaseDifficulty.OverallDifficulty);

            return(new ManiaDifficultyAttributes
            {
                StarRating = skills[0].DifficultyValue() * star_scaling_factor,
                Mods = mods,
                // Todo: This int cast is temporary to achieve 1:1 results with osu!stable, and should be removed in the future
                GreatHitWindow = (int)Math.Ceiling(getHitWindow300(mods) / clockRate),
                ScoreMultiplier = getScoreMultiplier(beatmap, mods),
                MaxCombo = beatmap.HitObjects.Sum(h => h is HoldNote ? 2 : 1),
                Skills = skills
            });
        }
Пример #3
0
        public TestSceneDrawableJudgement()
        {
            var hitWindows = new ManiaHitWindows();

            foreach (HitResult result in Enum.GetValues(typeof(HitResult)).OfType <HitResult>().Skip(1))
            {
                if (hitWindows.IsHitResultAllowed(result))
                {
                    AddStep("Show " + result.GetDescription(), () =>
                    {
                        SetContents(_ =>
                                    new DrawableManiaJudgement(new JudgementResult(new HitObject {
                            StartTime = Time.Current
                        }, new Judgement())
                        {
                            Type = result
                        }, null)
                        {
                            Anchor = Anchor.Centre,
                            Origin = Anchor.Centre,
                        });

                        // for test purposes, undo the Y adjustment related to the `ScorePosition` legacy positioning config value
                        // (see `LegacyManiaJudgementPiece.load()`).
                        // this prevents the judgements showing somewhere below or above the bounding box of the judgement.
                        foreach (var legacyPiece in this.ChildrenOfType <LegacyManiaJudgementPiece>())
                        {
                            legacyPiece.Y = 0;
                        }
                    });
                }
            }
        }
Пример #4
0
        public void TestMissReleaseAndHitSecondRelease()
        {
            var windows = new ManiaHitWindows();

            windows.SetDifficulty(10);

            var beatmap = new Beatmap <ManiaHitObject>
            {
                HitObjects =
                {
                    new HoldNote
                    {
                        StartTime = 1000,
                        Duration  = 500,
                        Column    = 0,
                    },
                    new HoldNote
                    {
                        StartTime = 1000 + 500 + windows.WindowFor(HitResult.Miss) + 10,
                        Duration  = 500,
                        Column    = 0,
                    },
                },
                BeatmapInfo =
                {
                    BaseDifficulty        = new BeatmapDifficulty
                    {
                        SliderTickRate    =  4,
                        OverallDifficulty = 10,
                    },
                    Ruleset               = new ManiaRuleset().RulesetInfo
                },
            };

            performTest(new List <ReplayFrame>
            {
                new ManiaReplayFrame(beatmap.HitObjects[1].StartTime, ManiaAction.Key1),
                new ManiaReplayFrame(beatmap.HitObjects[1].GetEndTime()),
            }, beatmap);

            AddAssert("first hold note missed", () => judgementResults.Where(j => beatmap.HitObjects[0].NestedHitObjects.Contains(j.HitObject))
                      .All(j => !j.Type.IsHit()));

            AddAssert("second hold note missed", () => judgementResults.Where(j => beatmap.HitObjects[1].NestedHitObjects.Contains(j.HitObject))
                      .All(j => j.Type.IsHit()));
        }
Пример #5
0
        public TestSceneDrawableJudgement()
        {
            var hitWindows = new ManiaHitWindows();

            foreach (HitResult result in Enum.GetValues(typeof(HitResult)).OfType <HitResult>().Skip(1))
            {
                if (hitWindows.IsHitResultAllowed(result))
                {
                    AddStep("Show " + result.GetDescription(), () => SetContents(() =>
                                                                                 new DrawableManiaJudgement(new JudgementResult(new HitObject(), new Judgement())
                    {
                        Type = result
                    }, null)
                    {
                        Anchor = Anchor.Centre,
                        Origin = Anchor.Centre,
                    }));
                }
            }
        }
Пример #6
0
        protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills, double clockRate)
        {
            if (beatmap.HitObjects.Count == 0)
            {
                return new ManiaDifficultyAttributes {
                           Mods = mods, Skills = skills
                }
            }
            ;

            HitWindows hitWindows = new ManiaHitWindows();

            hitWindows.SetDifficulty(beatmap.BeatmapInfo.BaseDifficulty.OverallDifficulty);

            return(new ManiaDifficultyAttributes
            {
                StarRating = difficultyValue(skills) * star_scaling_factor,
                Mods = mods,
                // Todo: This int cast is temporary to achieve 1:1 results with osu!stable, and should be removed in the future
                GreatHitWindow = (int)(hitWindows.Great / 2) / clockRate,
                Skills = skills
            });
        }
Пример #7
0
        protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills, double clockRate)
        {
            if (beatmap.HitObjects.Count == 0)
            {
                return new ManiaDifficultyAttributes {
                           Mods = mods
                }
            }
            ;

            HitWindows hitWindows = new ManiaHitWindows();

            hitWindows.SetDifficulty(beatmap.Difficulty.OverallDifficulty);

            return(new ManiaDifficultyAttributes
            {
                StarRating = skills[0].DifficultyValue() * star_scaling_factor,
                Mods = mods,
                GreatHitWindow = Math.Ceiling(getHitWindow300(mods) / clockRate),
                ScoreMultiplier = getScoreMultiplier(mods),
                MaxCombo = beatmap.HitObjects.Sum(h => h is HoldNote ? 2 : 1),
            });
        }