/// <summary> /// 使用指定的模式搜索谱面,可指定包含与不包含 /// </summary> /// <param name="mode"></param> /// <param name="option"></param> /// <returns></returns> public BeatmapCollection Find(OsuGameMode mode, BeatmapFindOption option = BeatmapFindOption.Contains) { var bc = new BeatmapCollection(); foreach (var b in _beatmaps) { if (option == BeatmapFindOption.Contains) { if (b.Mode == mode) { if (!bc.Contains(b)) { bc.Add(b); } } } if (option == BeatmapFindOption.NotContains) { if (b.Mode != mode) { if (!bc.Contains(b)) { bc.Add(b); } } } } return(bc); }
private MenuItem createCollectionMenuItem(BeatmapCollection collection) { return(new ToggleMenuItem(collection.Name.Value, MenuItemType.Standard, s => { if (s) { collection.Beatmaps.Add(beatmapInfo); } else { collection.Beatmaps.Remove(beatmapInfo); } }) { State = { Value = collection.Beatmaps.Contains(beatmapInfo) } }); }
private MenuItem createCollectionMenuItem(BeatmapCollection collection) { Debug.Assert(beatmapSet != null); TernaryState state; int countExisting = beatmapSet.Beatmaps.Count(b => collection.Beatmaps.Contains(b)); if (countExisting == beatmapSet.Beatmaps.Count) { state = TernaryState.True; } else if (countExisting > 0) { state = TernaryState.Indeterminate; } else { state = TernaryState.False; } return(new TernaryStateToggleMenuItem(collection.Name.Value, MenuItemType.Standard, s => { foreach (var b in beatmapSet.Beatmaps) { switch (s) { case TernaryState.True: if (collection.Beatmaps.Contains(b)) { continue; } collection.Beatmaps.Add(b); break; case TernaryState.False: collection.Beatmaps.Remove(b); break; } } }) { State = { Value = state } }); }
/// <summary> /// 从文件读取信息 /// </summary> /// <param name="fileName"></param> /// <returns></returns> public static BeatmapCollection ReadFromFile(string fileName = ".\\beatmaplist\\list.txt") { var oinfo = new OsuInfo(); var c = new BeatmapCollection(); if (!File.Exists(fileName)) { var names = fileName.Split('\\'); var name = names[names.Length - 1]; Directory.CreateDirectory(fileName.Replace(name, "")); File.Create(fileName).Close(); } var info = File.ReadAllLines(fileName); if (info.Length < 1) { MessageBox.Show("文件中不包含任何谱面信息,将重新搜索。"); c = GetAllBeatmaps(oinfo.BeatmapDirectory, BeatmapSearchOption.AllBeatmaps); } if (c._beatmaps.Count == 0) { foreach (var beatmap in info) { var beatmapdir = beatmap.Split('?')[1]; if (!File.Exists(beatmapdir)) { MessageBox.Show($"找不到谱面\"{beatmapdir}\",即将重新寻找谱面。"); return(GetAllBeatmaps(oinfo.BeatmapDirectory, BeatmapSearchOption.AllBeatmaps)); } var tmp = new Beatmap(beatmapdir); if (!tmp.NotValid) { c._beatmaps.Add(tmp); } } } return(c); }
public RhythmicGame(string[] args = null) { forwardLoggedErrorsToNotifications(); if (beatmaps == null) { beatmaps = new BeatmapCollection(); } if (beatmaps.Beatmaps == null) { beatmaps.Beatmaps = new BindableList <BeatmapMeta>(); } if (beatmaps.CurrentBeatmap == null) { beatmaps.CurrentBeatmap = new Bindable <BeatmapMeta>(); } Name = "RhythmicGame"; }
private void load(BeatmapCollection collection, TextureStore store) { collection.CurrentBeatmap.ValueChanged += OnBeatmapChanged; AddRangeInternal(new Drawable[] { new SpaceParticlesContainer(), new LinearVisualizer { Anchor = Anchor.BottomCentre, Origin = Anchor.BottomCentre, ValueMultiplier = 3500, BarsAmount = 200, Alpha = 0.25f, BarWidth = 5, Spacing = 5, }, new LinearVisualizer { Anchor = Anchor.TopCentre, Origin = Anchor.TopCentre, ValueMultiplier = 3500, IsReversed = true, BarsAmount = 200, Alpha = 0.25f, BarWidth = 5, Spacing = 5, }, new LinearVisualizer { Anchor = Anchor.BottomCentre, Origin = Anchor.BottomCentre, ValueMultiplier = 3500, IsReversed = true, BarsAmount = 200, Alpha = 0.25f, BarWidth = 5, Spacing = 5, }, new LinearVisualizer { Anchor = Anchor.TopCentre, Origin = Anchor.TopCentre, ValueMultiplier = 3500, BarsAmount = 200, Alpha = 0.25f, BarWidth = 5, Spacing = 5, }, new CircularVisualizer { Anchor = Anchor.Centre, Origin = Anchor.Centre, ValueMultiplier = 800, DegreeValue = 180, BarsAmount = 100, CircleSize = 348, BarWidth = 2, Alpha = 0.5f, }, new CircularVisualizer { Anchor = Anchor.Centre, Origin = Anchor.Centre, ValueMultiplier = 800, DegreeValue = 180, BarsAmount = 100, CircleSize = 348, BarWidth = 2, Rotation = 180, Alpha = 0.5f, }, new CircularVisualizer { Anchor = Anchor.Centre, Origin = Anchor.Centre, ValueMultiplier = 800, IsReversed = true, DegreeValue = 180, BarsAmount = 100, CircleSize = 348, BarWidth = 2, Alpha = 0.5f, }, new CircularVisualizer { Anchor = Anchor.Centre, Origin = Anchor.Centre, ValueMultiplier = 800, IsReversed = true, DegreeValue = 180, BarsAmount = 100, CircleSize = 348, BarWidth = 2, Rotation = 180, Alpha = 0.5f, }, new CircularContainer { Anchor = Anchor.Centre, Origin = Anchor.Centre, Size = new Vector2(350), Masking = true, EdgeEffect = new EdgeEffectParameters { Type = EdgeEffectType.Shadow, Colour = Color4.Black.Opacity(0.18f), Offset = new Vector2(0, 2), Radius = 6, }, Child = beatmapSprite = new OutlinedSprite { RelativeSizeAxes = Axes.Both, Anchor = Anchor.Centre, Origin = Anchor.Centre, FillMode = FillMode.Fill, BlurSigma = 10 } }, }); beatmapSprite.Texture = collection.CurrentBeatmap.Value.Logo ?? collection.CurrentBeatmap.Value.Background ?? store.Get("Backgrounds/bg2.jpg"); }
/* * /// <summary> * /// 使用osu!api获得相应谱面的信息 * /// </summary> * /// <returns>返回一个<seealso cref="OnlineBeatmap"/>对象</returns> * public OnlineBeatmap GetOnlineBeatmap() * { * OnlineBeatmapCollection bms = new OnlineBeatmapCollection(); * OsuApiQuery q = new OsuApiQuery(); * string osuApiKey = "fa2748650422c84d59e0e1d5021340b6c418f62f"; * q.QueryType = OsuApiQueryType.Beatmaps; * q.ApiKey = osuApiKey; * q.BeatmapId = (int)beatmap_id; * bms.AllParse(q); * return bms[0]; * }*/ /// <summary> /// 在本地的谱面集合中寻找对应谱面 /// </summary> /// <param name="bc">谱面集合</param> /// <returns>查找到的谱面</returns> public Beatmap FindInBeatmapCollection(BeatmapCollection bc) { _bc = bc ?? throw new NullReferenceException(); return(bc.Find(_beatmapId)); }
/// <summary> /// 在指定的文件夹中搜索谱面,可指定谱面添加选项(<see cref="BeatmapSearchOption" />),是否保存到文件与要保存到的文件的文件路径 /// </summary> /// <param name="beatmapdir"></param> /// <param name="option"></param> /// <param name="saveResultToFile"></param> /// <param name="saveFilePath"></param> /// <returns></returns> public static BeatmapCollection GetAllBeatmaps(string beatmapdir, BeatmapSearchOption option, bool saveResultToFile = true, string saveFilePath = ".\\beatmaplist\\list.txt") { var bc = new BeatmapCollection(); if (Directory.Exists(beatmapdir)) { if (option == BeatmapSearchOption.AllBeatmaps) { var dirs = Directory.GetFiles(beatmapdir, "*.osu", SearchOption.AllDirectories); foreach (var osufile in dirs) { var b = new Beatmap(osufile); bc.Add(b); } if (saveResultToFile) { bc.Save(saveFilePath); } return(bc); } if (option == BeatmapSearchOption.OnlyTheFirstBeatmap) { var dirs = Directory.GetDirectories(beatmapdir, "*", SearchOption.AllDirectories); foreach (var dir in dirs) { var em = Directory.GetFiles(dir + '\\', "*.osu", SearchOption.AllDirectories); { if (em.Length == 0) { //throw new osuToolsException.NoBeatmapInFolder("指定的文件夹里不包含谱面。", dir); } bc.Add(new Beatmap(em.First())); } } } else { if (beatmapdir == null) { throw new NullReferenceException(); } throw new DirectoryNotFoundException(); } if (bc.Beatmaps.Count == 0) { return(bc); } if (saveResultToFile) { bc.Save(saveFilePath); } return(bc); } return(new BeatmapCollection()); }
/* public BeatmapCollection FindEx(string artist = null, string title = null, string creator = null, string version = null, string tag = null, string source = null) * { * BeatmapCollection result = new BeatmapCollection(); * * return result; * }*/ /// <summary> /// 使用关键词搜索谱面,可指定包括与不包括 /// </summary> /// <param name="keyWord"></param> /// <param name="option"></param> /// <returns></returns> public BeatmapCollection Find(string keyWord, BeatmapFindOption option = BeatmapFindOption.Contains) { var b = new BeatmapCollection(); var keyword = keyWord.ToUpper(); foreach (var beatmap in _beatmaps) { var allinfo = beatmap.ToString().ToUpper() + " " + beatmap.Source.ToUpper() + " " + beatmap.Tags.ToUpper() + " " + beatmap.Creator.ToUpper() + " " + beatmap.Maker.ToUpper(); if (option == BeatmapFindOption.Contains) { if (keyword.StartsWith("${") && keyword.EndsWith("}")) { var newkeyword = keyword.Trim('$', '}', '{'); if (beatmap.Title.ToUpper() == newkeyword || beatmap.TitleUnicode.ToUpper() == newkeyword || beatmap.Artist.ToUpper() == newkeyword || beatmap.ArtistUnicode.ToUpper() == newkeyword || beatmap.Maker.ToUpper() == newkeyword || beatmap.Creator.ToUpper() == newkeyword || beatmap.Tags.ToUpper() == newkeyword || beatmap.Source.ToUpper() == newkeyword || beatmap.Difficulty.ToUpper() == newkeyword) { if (!b.Contains(beatmap)) { b.Add(beatmap); } } } else if (allinfo.Contains(keyword)) { b.Add(beatmap); } } if (option == BeatmapFindOption.NotContains) { if (keyword.StartsWith("${") && keyword.EndsWith("}")) { var newkeyw = keyword.Trim('$', '}', '{'); if (beatmap.Title.ToUpper() != newkeyw && beatmap.TitleUnicode.ToUpper() != newkeyw && beatmap.Artist.ToUpper() != newkeyw && beatmap.ArtistUnicode.ToUpper() != newkeyw && beatmap.Maker.ToUpper() != newkeyw && beatmap.Creator.ToUpper() != newkeyw && beatmap.Tags.ToUpper() != newkeyw && beatmap.Source.ToUpper() != newkeyw && beatmap.Difficulty.ToUpper() != newkeyw) { if (!b.Contains(beatmap)) { b.Add(beatmap); } } } else if (!allinfo.Contains(keyword)) { b.Add(beatmap); } } } if (b.Beatmaps.Count == 0) { throw new BeatmapNotFoundException("找不到指定的谱面"); } return(b); }