示例#1
0
            /// <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) }
     });
 }
示例#3
0
        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 }
            });
        }
示例#4
0
            /// <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);
            }
示例#5
0
        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";
        }
示例#6
0
        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");
        }
示例#7
0
 /*
  *  /// <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));
 }
示例#8
0
            /// <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());
            }
示例#9
0
            /* 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);
            }