public void AddMusicUIElement(MusicInfo info)
    {
        GameObject musicObj = new GameObject(info.MusicTitle);

        musicObj.transform.parent        = musicContent.transform;
        musicObj.transform.localPosition = Vector3.zero;
        musicObj.transform.localScale    = Vector3.one;

        BMSMusicInfo    selectedMusicInfo = info.BmsFileList[info.SelectedLevelIndex];
        TextMeshProUGUI musicText         = musicObj.AddComponent <TextMeshProUGUI>();

        musicText.text      = $"Title : {info.MusicTitle}\nGenre : {selectedMusicInfo.genre}\nArtist : {selectedMusicInfo.artistName}\nBPM : {selectedMusicInfo.bpm}\n";
        musicText.fontSize  = 60;
        musicText.alignment = TextAlignmentOptions.CenterGeoAligned;

        musicObj.GetComponent <RectTransform>().sizeDelta = new Vector2(700, GlobalDefine.SCREEN_HEIGHT);
    }
 public BMSHeader()
 {
     info = new BMSMusicInfo();
     data = new BMSMusicData();
 }
Beispiel #3
0
    // Select Scene에서 필요한 정보들만 미리 파싱
    public void RecursiveFileFind(DirectoryInfo bmsDirectory, ref List <MusicInfo> musicInfoList)
    {
        string[] files = Directory.EnumerateFiles(bmsDirectory.FullName, "*.*", SearchOption.AllDirectories)
                         .Where(file => GlobalDefine.AVAILABLE_BMS_EXTENSIONS.Any(available => file.EndsWith(available, StringComparison.OrdinalIgnoreCase)))
                         .ToArray();

        if (files.Length == 0)
        {
            DebugWrapper.LogWarning("BMS File not exist.");
            return;
        }

        MusicInfo sendMusicInfo = new MusicInfo(bmsDirectory.Name);

        for (int fileIndex = 0; fileIndex < files.Length; ++fileIndex)
        {
            string[] textLine = File.ReadAllLines(files[fileIndex], System.Text.Encoding.Default);
            if (textLine.Length > 0)
            {
                BMSMusicInfo musicInfo = new BMSMusicInfo();

                musicInfo.bmsFilePath.bmsPath       = files[fileIndex];
                musicInfo.bmsFilePath.bmsParentPath = Path.GetDirectoryName(files[fileIndex]).ToString();

                char[]   separator = { ' ', ':' };
                string[] splitText;

                for (int lineIndex = 0; lineIndex < textLine.Length; ++lineIndex)
                {
                    textLine[lineIndex] = textLine[lineIndex].Trim();

                    if (string.IsNullOrEmpty(textLine[lineIndex]) || // 빈 라인에 대한 처리
                        !textLine[lineIndex].StartsWith("#"))        // '#'으로 시작하는 라인만 유효(나머지는 보통 주석)
                    {
                        continue;
                    }

                    splitText = textLine[lineIndex].Split(separator);
                    if (splitText.Length <= 1)
                    {
                        continue;
                    }

                    // GENRE
                    if (splitText[0].Equals("#GENRE"))
                    {
                        for (int i = 1; i < splitText.Length; ++i)
                        {
                            musicInfo.genre += splitText[i] + " ";
                        }
                    }
                    // TITLE
                    if (splitText[0].Equals("#TITLE"))
                    {
                        musicInfo.titleName = musicInfo.subTitleName = string.Empty;
                        int index = 1;
                        //do
                        //{
                        //    musicInfo.titleName += splitText[index];
                        //    index++;
                        //} while (!splitText[index].StartsWith("["));

                        for (int i = index; i < splitText.Length; ++i)
                        {
                            musicInfo.subTitleName += splitText[i];
                        }
                        musicInfo.subTitleName = musicInfo.subTitleName.Trim('[', ']');
                    }
                    // ARTIST
                    else if (splitText[0].Equals("#ARTIST"))
                    {
                        musicInfo.artistName = splitText[1];
                    }
                    else if (splitText[0].Equals("#BPM"))
                    {
                        if (int.TryParse(splitText[1], out musicInfo.bpm))
                        {
                        }
                    }
                    // PLAY LEVEL
                    else if (splitText[0].Equals("#PLAYLEVEL"))
                    {
                        if (int.TryParse(splitText[1], out musicInfo.playLevel))
                        {
                        }
                    }
                    // STAGE FILE
                    else if (splitText[0].Equals("#STAGEFILE"))
                    {
                        musicInfo.bmsFilePath.stageFileName = splitText[1];
                    }

                    if (char.IsNumber(splitText[0][1]))
                    {
                        break;                                 // FileSystem에선 Data Field까지 전부 파싱할 필요 없음. Data Field 도달 시 파싱 종료.
                    }
                }
                sendMusicInfo.BmsFileList.Add(musicInfo);
            }
        }
        musicInfoList.Add(sendMusicInfo);
    }