示例#1
0
        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));
        }
示例#2
0
        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;
        }