private void load(OsuConfigManager config, SkinManager skinManager, BeatmapManager beatmaps, Framework.Game game) { // prevent user from changing beatmap while the intro is still runnning. beatmap = Beatmap.BeginLease(false); MenuVoice = config.GetBindable <bool>(OsuSetting.MenuVoice); MenuMusic = config.GetBindable <bool>(OsuSetting.MenuMusic); seeya = audio.Samples.Get(SeeyaSampleName); BeatmapSetInfo setInfo = null; // if the user has requested not to play theme music, we should attempt to find a random beatmap from their collection. if (!MenuMusic.Value) { var sets = beatmaps.GetAllUsableBeatmapSets(IncludedDetails.Minimal); if (sets.Count > 0) { setInfo = beatmaps.QueryBeatmapSet(s => s.ID == sets[RNG.Next(0, sets.Count - 1)].ID); initialBeatmap = beatmaps.GetWorkingBeatmap(setInfo.Beatmaps[0]); } } // we generally want a song to be playing on startup, so use the intro music even if a user has specified not to if no other track is available. if (setInfo == null) { if (!loadThemedIntro()) { // if we detect that the theme track or beatmap is unavailable this is either first startup or things are in a bad state. // this could happen if a user has nuked their files store. for now, reimport to repair this. var import = beatmaps.Import(new ZipArchiveReader(game.Resources.GetStream($"Tracks/{BeatmapFile}"), BeatmapFile)).Result; import.PerformWrite(b => { b.Protected = true; beatmaps.Update(b); }); loadThemedIntro(); } } bool loadThemedIntro() { setInfo = beatmaps.QueryBeatmapSets(b => b.Hash == BeatmapHash, IncludedDetails.AllButRuleset).FirstOrDefault(); if (setInfo == null) { return(false); } initialBeatmap = beatmaps.GetWorkingBeatmap(setInfo.Beatmaps[0]); return(UsingThemedIntro = initialBeatmap != null); } }
private void load(OsuConfigManager config, SkinManager skinManager, BeatmapManager beatmaps, Framework.Game game) { // prevent user from changing beatmap while the intro is still runnning. beatmap = Beatmap.BeginLease(false); MenuVoice = config.GetBindable <bool>(OsuSetting.MenuVoice); MenuMusic = config.GetBindable <bool>(OsuSetting.MenuMusic); seeya = audio.Samples.Get(@"seeya"); BeatmapSetInfo setInfo = null; if (!MenuMusic.Value) { var sets = beatmaps.GetAllUsableBeatmapSets(); if (sets.Count > 0) { setInfo = beatmaps.QueryBeatmapSet(s => s.ID == sets[RNG.Next(0, sets.Count - 1)].ID); } } if (setInfo == null) { setInfo = beatmaps.QueryBeatmapSet(b => b.Hash == BeatmapHash); if (setInfo == null) { // we need to import the default menu background beatmap setInfo = beatmaps.Import(new ZipArchiveReader(game.Resources.GetStream($"Tracks/{BeatmapFile}"), BeatmapFile)).Result; setInfo.Protected = true; beatmaps.Update(setInfo); } } introBeatmap = beatmaps.GetWorkingBeatmap(setInfo.Beatmaps[0]); Track = introBeatmap.Track; }
private void load(OsuConfigManager config, Framework.Game game, RealmAccess realm, IAPIProvider api) { // prevent user from changing beatmap while the intro is still running. beatmap = Beatmap.BeginLease(false); MenuVoice = config.GetBindable <bool>(OsuSetting.MenuVoice); MenuMusic = config.GetBindable <bool>(OsuSetting.MenuMusic); if (api.LocalUser.Value.IsSupporter) { AddInternal(skinnableSeeya = new SkinnableSound(new SampleInfo(SeeyaSampleName))); } else { seeya = audio.Samples.Get(SeeyaSampleName); } // if the user has requested not to play theme music, we should attempt to find a random beatmap from their collection. if (!MenuMusic.Value) { realm.Run(r => { var usableBeatmapSets = r.All <BeatmapSetInfo>().Where(s => !s.DeletePending && !s.Protected).AsRealmCollection(); int setCount = usableBeatmapSets.Count; if (setCount > 0) { var found = usableBeatmapSets[RNG.Next(0, setCount - 1)].Beatmaps.FirstOrDefault(); if (found != null) { initialBeatmap = beatmaps.GetWorkingBeatmap(found); } } }); } // we generally want a song to be playing on startup, so use the intro music even if a user has specified not to if no other track is available. if (initialBeatmap == null) { // Intro beatmaps are generally made using the osu! ruleset. // It might not be present in test projects for other rulesets. bool osuRulesetPresent = rulesets.GetRuleset(0) != null; if (!loadThemedIntro() && osuRulesetPresent) { // if we detect that the theme track or beatmap is unavailable this is either first startup or things are in a bad state. // this could happen if a user has nuked their files store. for now, reimport to repair this. var import = beatmaps.Import(new ZipArchiveReader(game.Resources.GetStream($"Tracks/{BeatmapFile}"), BeatmapFile)).GetResultSafely(); import?.PerformWrite(b => b.Protected = true); loadThemedIntro(); } } bool loadThemedIntro() { var setInfo = beatmaps.QueryBeatmapSet(b => b.Protected && b.Hash == BeatmapHash); if (setInfo == null) { return(false); } setInfo.PerformRead(s => { if (s.Beatmaps.Count == 0) { return; } initialBeatmap = beatmaps.GetWorkingBeatmap(s.Beatmaps.First()); }); return(UsingThemedIntro = initialBeatmap != null); } }