private void ReadFromOrtdp(Beatmap beatmap) { NowPlaying = "Loading..."; _bStatus = OsuBeatmapStatus.Loading; if (beatmap == null || beatmap == OsuRTDataProvider.BeatmapInfo.Beatmap.Empty) { IO.CurrentIO.WriteColor("Beatmap is null or empty.", ConsoleColor.Red, true, false); } Beatmap = new Beatmaps.Beatmap(beatmap); if (Beatmap == null) { IO.CurrentIO.Write("Fail to read beatmap.", true, false); } else { NowPlaying = Beatmap.ToString(); Thread.Sleep(100); _hitObjects = Beatmap.HitObjects; _bStatus = OsuBeatmapStatus.Unknown; _dur = _drainTime = _hitObjects.LastOrDefault() == null ? TimeSpan.FromMilliseconds(0) : TimeSpan.FromMilliseconds(_hitObjects.LastOrDefault().GetEndTime()); Beatmap.Stars = _rtppi.BeatmapTuple.Stars; if (DebugMode) { IO.CurrentIO.Write("Beatmap read from ORTDP.", true, false); } } }
/// <summary> /// 使用<seealso cref="IBeatmap"/>创建一个CacheBeatmap /// </summary> /// <param name="beatmap"></param> /// <param name="songDuration"></param> /// <param name="drainTime"></param> /// <param name="status"></param> /// <exception cref="ArgumentNullException"></exception> public CacheBeatmap(Beatmaps.Beatmap beatmap, TimeSpan songDuration, TimeSpan drainTime, OsuBeatmapStatus status) { _innerBeatmap = beatmap ?? throw new ArgumentNullException(nameof(beatmap)); SongDuration = songDuration; DrainTime = drainTime; Status = status; }
private void ReadFromOsudb(Beatmap beatmap) { NowPlaying = "Loading..."; _bStatus = OsuBeatmapStatus.Loading; if (_md5Str is null || _md5Str1 is null) { return; } _md5Str = new MD5String(""); if (_md5Str != _md5Str1) { _beatmapDb = new OsuBeatmapDb(); _md5Str1 = _md5Str; } try { if (beatmap != null) { var md5 = MD5String.GetString( new MD5CryptoServiceProvider().ComputeHash(File.ReadAllBytes(beatmap.FilenameFull))); var osuBeatmap = _beatmapDb.Beatmaps.FindByMd5(md5); if (!(osuBeatmap is null)) { Beatmap = new Beatmaps.Beatmap(osuBeatmap); _osuBeatmap = osuBeatmap; NowPlaying = Beatmap.ToString(); _hitObjects = Beatmap.HitObjects; var lastHitObjectEndTime = TimeSpan.FromMilliseconds(_hitObjects.LastOrDefault().GetEndTime()); _bStatus = osuBeatmap.BeatmapStatus; var totalTime = osuBeatmap.TotalTime; _dur = totalTime; _drainTime = lastHitObjectEndTime; if (CurrentMode is ILegacyMode le) { if (_osuBeatmap.Mode == OsuGameMode.Osu) { Beatmap.Stars = _osuBeatmap.ModStarPair.GetStars(le.LegacyMode, Mods.ToIntMod()); } } if (DebugMode) { IO.CurrentIO.Write("Beatmap read from OsuDb.", true, false); } } else { IO.CurrentIO.WriteColor("Fail to get beatmap info.", ConsoleColor.Red, true, false); } } }