public void TestDecodePostConverted() { var converted = new OsuBeatmapConverter(decodeAsJson(normal), new OsuRuleset()).Convert(); var processor = new OsuBeatmapProcessor(converted); processor.PreProcess(); foreach (var o in converted.HitObjects) { o.ApplyDefaults(converted.ControlPointInfo, converted.Difficulty); } processor.PostProcess(); var beatmap = converted.Serialize().Deserialize <Beatmap>(); var curveData = beatmap.HitObjects[0] as IHasPathWithRepeats; var positionData = beatmap.HitObjects[0] as IHasPosition; Assert.IsNotNull(positionData); Assert.IsNotNull(curveData); Assert.AreEqual(90, curveData.Path.Distance); Assert.AreEqual(new Vector2(192, 168), positionData.Position); Assert.AreEqual(956, beatmap.HitObjects[0].StartTime); Assert.IsTrue(beatmap.HitObjects[0].Samples.Any(s => s.Name == HitSampleInfo.HIT_NORMAL)); positionData = beatmap.HitObjects[1] as IHasPosition; Assert.IsNotNull(positionData); Assert.AreEqual(new Vector2(304, 56), positionData.Position); Assert.AreEqual(1285, beatmap.HitObjects[1].StartTime); Assert.IsTrue(beatmap.HitObjects[1].Samples.Any(s => s.Name == HitSampleInfo.HIT_CLAP)); }
private void LoadBeatmapFromFile(string beatmapPath) { // Load osu beatmap var convertBeatmap = ReadBeatmap(beatmapPath); beatmap = (OsuBeatmap) new OsuBeatmapConverter(convertBeatmap).Convert(); var processor = new OsuBeatmapProcessor(beatmap); processor.PreProcess(); processor.PostProcess(); // Calculate difficulty var workingBeatmap = new PpWorkingBeatmap(convertBeatmap); calculator = new OsuDifficultyCalculator(new OsuRuleset(), workingBeatmap); var diffAttributes = calculator.Calculate(new Mod[] { }); var aim = (Aim)diffAttributes.Skills[0]; aimStrainTimes = aim.StrainTimes; aimStrainValues = aim.StrainValues; aimStrainPeakTimes = aim.strainPeakTimes; aimStrainPeaks = aim.strainPeaks; aimStrainPerObjectValues = aim.StrainPerObjectValues; (denseAimStrainTimes, denseAimStrainValues) = plotter.CalculateDenseStrainValues(aim.StrainTimes, aim.StrainValues); // Plot aim strain PerfStopwatch.Start("Aim Strain Graph"); aimStrainPlot.plt.Clear(); plotter.InitAimStrainGraph(aimStrainPlot.plt); plotter.PlotFullAimStrainGraph( aimStrainPlot.plt, aimStrainPeakTimes, aimStrainPeaks, denseAimStrainTimes, denseAimStrainValues, aimStrainTimes, aimStrainPerObjectValues); aimStrainPlot.Render(); PerfStopwatch.Stop(); Text = $"bmviewer - {convertBeatmap}"; // Update GUI controls // TODO: Use events to update values timeUpDown.Minimum = (int)beatmap.HitObjects.First().StartTime - 1000; trackBar1.Minimum = (int)beatmap.HitObjects.First().StartTime - 1000; timeUpDown.Maximum = (int)beatmap.HitObjects.Last().StartTime + 10000; trackBar1.Maximum = (int)beatmap.HitObjects.Last().StartTime + 10000; // Set initial game time SetGameTime((int)beatmap.HitObjects.First().StartTime - 1000); stopwatchStartTime = gameTime; }