public void TestSamplePlaybackWithRateMods(Type expectedMod, double expectedRate) { GameplayClockContainer gameplayContainer = null; StoryboardSampleInfo sampleInfo = null; TestDrawableStoryboardSample sample = null; Mod testedMod = Activator.CreateInstance(expectedMod) as Mod; switch (testedMod) { case ModRateAdjust m: m.SpeedChange.Value = expectedRate; break; case ModTimeRamp m: m.FinalRate.Value = m.InitialRate.Value = expectedRate; break; } AddStep("setup storyboard sample", () => { Beatmap.Value = new TestCustomSkinWorkingBeatmap(new OsuRuleset().RulesetInfo, this); SelectedMods.Value = new[] { testedMod }; var beatmapSkinSourceContainer = new BeatmapSkinProvidingContainer(Beatmap.Value.Skin); Add(gameplayContainer = new MasterGameplayClockContainer(Beatmap.Value, 0) { Child = beatmapSkinSourceContainer }); beatmapSkinSourceContainer.Add(sample = new TestDrawableStoryboardSample(sampleInfo = new StoryboardSampleInfo("test-sample", 1, 1)) { Clock = gameplayContainer.GameplayClock }); }); AddStep("start", () => gameplayContainer.Start()); AddAssert("sample playback rate matches mod rates", () => testedMod != null && Precision.AlmostEquals( sample.ChildrenOfType <DrawableSample>().First().AggregateFrequency.Value, ((IApplicableToRate)testedMod).ApplyToRate(sampleInfo.StartTime))); }
public TestDrawableStoryboardSample(StoryboardSampleInfo sampleInfo) : base(sampleInfo) { }
public DrawableStoryboardSample(StoryboardSampleInfo sampleInfo) { this.sampleInfo = sampleInfo; LifetimeStart = sampleInfo.StartTime; }