Пример #1
0
    public void SetMusicData(int difficulty, string id)
    {
        try
        {
            MusicDataLoader.MusicProperty data = GetComponent <MusicDataLoader>().getMusicProperty(id);
            if (data.level[difficulty] == -1)
            {
                return;
            }

            //Frame
            RawImage Frame = GetComponent <RawImage>();
            Frame.texture = FrameTexture[difficulty];

            //Title
            MusicTitleUI.text = data.music;

            //Credits
            CreditsUI.text = data.credits;

            //Artwork
            byte[]    bytes   = File.ReadAllBytes("Music/" + id + "/image.png");
            Texture2D texture = new Texture2D(500, 500);
            texture.LoadImage(bytes);
            ArtworkUI.texture = texture;

            //BPM
            BPMUI.text = "BPM " + GetComponent <MusicDataLoader>().getNotesData(difficulty, id).BPM.ToString();

            //Level
            LevelUI.text = data.level[difficulty].ToString();

            //Score & Combo
            ScoreController.Score temp = ScoreController.LoadScore(DataHolder.UserID, difficulty, id);
            ComboUI.text = "COMBO " + temp.MaxCombo.ToString();
            ScoreUI.text = temp.MaxScore.ToString();

            //Time
            string path = "Music/" + id + "/music.wav";
            StartCoroutine(SetAudioTime(path));
        }
        catch (Exception e)
        {
            Debug.LogError(e.Message);
        }
    }
Пример #2
0
    private void PlayMusicPreview(int selection)
    {
        seq.Kill();
        seq = DOTween.Sequence();

        if (selection != -1)
        {
            string id = SortedMusicList[selection];
            MusicDataLoader.MusicProperty list = GetComponent <MusicDataLoader>().getMusicProperty(id);
            float starttime = list.preview.start;
            float endtime   = list.preview.end;
            MusicPreview.volume = 0;

            StartCoroutine(GetAudioClip(id, starttime));

            seq.Join(
                MusicPreview.DOFade(1, fadeTime)
                );
            seq.Insert(endtime - starttime,
                       MusicPreview.DOFade(0, fadeTime)
                       );
            seq.Insert(endtime - starttime + fadeTime,
                       DOVirtual.DelayedCall(0, () =>
            {
                MusicPreview.Stop();
                PlayMusicPreview(selection);
            })
                       );
        }
        else
        {
            seq.Join(
                MusicPreview.DOFade(0, fadeTime)
                );
            seq.Insert(fadeTime,
                       DOVirtual.DelayedCall(0, () =>
            {
                MusicPreview.Stop();
            })
                       );
        }

        seq.Play();
    }
Пример #3
0
    IEnumerator StartSettings()
    {
        //非デバッグ時の処理
        if (MusicID == "")
        {
            MusicID       = DataHolder.NextMusicID;
            Difficulty    = DataHolder.Difficulty;
            PlayVideo     = DataHolder.isVideo;
            GlobalOffset += DataHolder.GlobalNoteOffset;
        }
        else
        {
            DebugMode = true;
            Debug.LogWarning("エディタ用デバッグモードで起動中");
        }
        DataHolder.DebugMode = DebugMode;

        //楽曲データ取得
        DebugLog("楽曲データを取得中");
        MusicDataLoader.MusicProperty musicinfo = GetComponent <MusicDataLoader>().getMusicProperty(MusicID);
        MusicName = musicinfo.music;
        Level     = musicinfo.level[Difficulty];
        Composer  = musicinfo.credits;
        MusicDataLoader.Notes note = GetComponent <MusicDataLoader>().getNotesData(Difficulty, MusicID);
        BPM            = note.BPM;
        Offset         = note.offset;
        Notes          = note.notes;
        MaxNotesAmount = Notes.Length;

        //ノーツ生成時刻計算
        DebugLog("ノーツの移動開始時刻を計算中");
        NoteStartTime       = new double[MaxNotesAmount];
        NoteStartTimeSlider = new double[MaxNotesAmount, 64];

        double tSPB = ((double)60 / ((double)BPM * (double)Notes[0].LPB));

        if ((tSPB * (double)Notes[0].num + ((double)Offset / (double)6000 * tSPB) - ArrivalTime + GlobalOffset) <= 0)
        {
            MusicStartTimeOffset = Mathf.Ceil(-(float)(tSPB * (double)Notes[0].num + ((double)Offset / (double)6000 * tSPB) - ArrivalTime + GlobalOffset));
            DebugLog("ノーツ開始時間が負の数であるため、オフセットを設定しています " + MusicStartTimeOffset.ToString());
        }

        for (int n = 0; n < MaxNotesAmount; n++)
        {
            //1ノーツの単位 60/(BPM*LPB)
            double SPB       = (60 / ((double)BPM * (double)Notes[n].LPB));
            double OffsetSec = ((double)Offset / ((660000 / ((double)Notes[n].LPB / 4)) / (double)BPM)) * SPB;

            NoteStartTime[n] = SPB * Notes[n].num + OffsetSec - ArrivalTime + GlobalOffset + MusicStartTimeOffset;

            if (Notes[n].type == 2)
            {
                for (int k = 0; k < Notes[n].notes.Length; k++)
                {
                    double tempSPB       = (60f / ((double)BPM * (double)Notes[n].notes[k].LPB));
                    double tempOffsetSec = ((double)Offset / ((660000 / ((double)Notes[n].notes[k].LPB / 4)) / (double)BPM)) * tempSPB;
                    NoteStartTimeSlider[n, k] = tempSPB * Notes[n].notes[k].num + tempOffsetSec - ArrivalTime + GlobalOffset + MusicStartTimeOffset;
                }
            }

            if (n + 1 != MaxNotesAmount && Notes[n].num == Notes[n + 1].num && Notes[n].LPB == Notes[n + 1].LPB)// && Notes[n].type == Notes[n + 1].type)
            {
                NoteStartTime[n + 1] = NoteStartTime[n];
            }
        }

        DebugLog("ノーツを生成中");
        //ノーツ生成
        NotesPrefab.SetActive(false);
        for (int i = 0; i < MaxNotesAmount; i++)
        {
            SpawnNotes(i, Notes[i].block, (60f / ((double)BPM * (double)Notes[i].LPB)));
        }

        //インターフェース
        DebugLog("UIの設定中");
        MusicTitleText.text = MusicName;
        AuthorText.text     = Composer;
        LevelText.text      = Level.ToString();
        ScoreText.text      = Score.ToString();
        ComboText.text      = Combo.ToString();

        //アートワーク設定
        byte[]    bytes   = File.ReadAllBytes("Music/" + MusicID + "/image.png");
        Texture2D texture = new Texture2D(55, 55, TextureFormat.ARGB4444, false);

        texture.LoadImage(bytes);
        texture.Compress(false);
        MusicArtwork.sprite = Sprite.Create(texture, new Rect(0f, 0f, texture.width, texture.width), new Vector2(0.5f, 0.5f));

        //ビデオの設定
        DebugLog("ビデオの設定中");
        if (PlayVideo)
        {
            string videoPath = Directory.GetCurrentDirectory() + "/" + "Music/" + MusicID + "/video.mp4";
            if (GetComponent <MusicDataLoader>().checkExist(videoPath))
            {
                videoPlayer.url    = "file://" + videoPath;
                videoPlayer.source = VideoSource.Url;
            }
            else
            {
                PlayVideo = false;
            }
        }

        if (!DebugMode)
        {
            Vector3 temp = rawImage.transform.localPosition;
            if (DataHolder.VideoSettingMode == "cut")
            {
                temp.z = 260;
                rawImage.transform.localPosition = temp;
            }
            else if (DataHolder.VideoSettingMode == "fit")
            {
                temp.z = 360;
                rawImage.transform.localPosition = temp;
            }
        }
        else
        {
            string  VideoSettingMode = "cut";
            Vector3 temp             = rawImage.transform.localPosition;
            if (VideoSettingMode == "cut")
            {
                temp.z = 260;
                rawImage.transform.localPosition = temp;
            }
            else if (VideoSettingMode == "fit")
            {
                temp.z = 360;
                rawImage.transform.localPosition = temp;
            }
        }

        //音楽の設定
        DebugLog("音楽の設定中");
        string path = "Music/" + MusicID + "/music.wav";

        StartCoroutine(GetAudioClip(path));

        //画面の遷移
        if (!DebugMode)
        {
            float           timeDelay = 0.5f;
            GameObject[]    changer   = new GameObject[4];
            RectTransform[] rectTran  = new RectTransform[4];

            for (int i = 0; i < 4; i++)
            {
                changer[i]  = DataHolder.TemporaryGameObject.transform.Find(Difficulty.ToString()).Find(i.ToString()).gameObject;
                rectTran[i] = changer[i].GetComponent <RectTransform>();
            }

            Sequence sceneChangeTween = DOTween.Sequence();
            for (int i = 0; i < 4; i++)
            {
                sceneChangeTween.Insert(1 + 0.25f * (3 - i),
                                        rectTran[i].DOLocalMoveX(-1280, timeDelay).SetEase(Ease.OutQuint)
                                        );
            }

            sceneChangeTween.Join(
                DOVirtual.DelayedCall(4f, () =>
            {
                Destroy(SceneChange);
            })
                );

            sceneChangeTween.Play();
        }
        yield return(new WaitForSeconds(4));

        //Noteの設定
        foreach (Transform childTransform in NotesParentObject.transform)
        {
            childTransform.gameObject.SetActive(true);
        }
        AllNotes       = GameObject.FindGameObjectsWithTag("Note");
        AllNotesSlider = GameObject.FindGameObjectsWithTag("NoteSlider");
        foreach (Transform childTransform in NotesParentObject.transform)
        {
            childTransform.gameObject.SetActive(false);
        }

        //音楽の再生
        TimeComponent.SetStartTime(MusicStartTimeOffset);
        DebugLog("音楽を再生しました");
        DOVirtual.DelayedCall(MusicStartTimeOffset, () =>
        {
            audioSource.Play();
            if (PlayVideo)
            {
                videoPlayer.Play();
            }
        });

        //ステータス切り替え
        isPlaying  = true;
        GameStatus = Status.InGame;
    }
Пример #4
0
    private void Awake()
    {
        if (MusicID == "")
        {
            DebugMode = false;
        }
        else
        {
            DebugMode = true;
        }

        flag     = false;
        sequence = DOTween.Sequence();
        if (!DebugMode)
        {
            SceneChange = GameObject.Find("SceneChangeEnd");
        }

        //初期座標設定
        Background.localPosition = new Vector3(-1100f, Background.localPosition.y, Background.localPosition.z);
        Panel.localPosition      = new Vector3(-950f, Panel.localPosition.y, Panel.localPosition.z);
        Artwork.localPosition    = new Vector3(Artwork.localPosition.x, 180f, Artwork.localPosition.z);
        ArtworkImage.color       = new Color(1f, 1f, 1f, 0f);
        Result.localPosition     = new Vector3(-470f, Result.localPosition.y, Result.localPosition.z);
        Result.gameObject.SetActive(false);
        for (int i = 0; i < 5; i++)
        {
            Judgement[i].gameObject.SetActive(false);
            Judgement[i].localPosition = new Vector3(-300f - i * 20f, Judgement[i].localPosition.y, Judgement[i].localPosition.z);
        }
        Score.localPosition = new Vector3(-600f, Score.localPosition.y, Score.localPosition.z);
        Score.gameObject.SetActive(false);
        NewRecord.gameObject.SetActive(false);
        Rank.localScale   = new Vector3(0f, 0f, 1f);
        RankImage.color   = new Color(1f, 1f, 1f, 0f);
        PressButton.color = new Color(1f, 1f, 1f, 0f);

        //BGM 設定
        string path = "Audio/result.wav";

        StartCoroutine(GetAudioClip(path));


        //値設定
        if (!DebugMode)
        {
            UserID       = DataHolder.UserID;
            ScoreValue   = DataHolder.Score;
            ComboValue   = DataHolder.Combo;
            MaximumScore = DataHolder.MaximumScore;
            MaximumCombo = DataHolder.MaximumCombo;
            Difficulty   = DataHolder.Difficulty;
            MusicID      = DataHolder.NextMusicID;

            ScoreController.Score sc = ScoreController.LoadScore(UserID, Difficulty, MusicID);
            CurrentHighscore = sc.MaxScore;
            CurrentMaxCombo  = sc.MaxCombo;

            OldHighscore.text = LintNumber(7, sc.MaxScore);
            OldMaxcombo.text  = LintNumber(4, sc.MaxCombo);

            for (int i = 0; i < 5; i++)
            {
                Judgement[i].Find("Text").GetComponent <TextMeshProUGUI>().text = LintNumber(4, DataHolder.JudgementAmount[i]);
            }
        }
        MusicDataLoader.MusicProperty MusicData = GetComponent <MusicDataLoader>().getMusicProperty(MusicID);
        if (!DebugMode)
        {
            Panel.Find("Level").Find("Text").GetComponent <Text>().text = MusicData.level[Difficulty].ToString();
            Panel.Find("Difficulty").GetComponent <Text>().text         = DifficultyName[Difficulty];
            ScorePercentage = ((float)ScoreValue / (float)MaximumScore) * 100f;
            ComboPercentage = ((float)ComboValue / (float)MaximumCombo) * 100f;
        }
        Panel.Find("Title").GetComponent <Text>().text  = MusicData.music;
        Panel.Find("Author").GetComponent <Text>().text = MusicData.credits;

        if (ScorePercentage >= 90)
        {
            RankImage.texture = RankImageSoruce[0];
        }
        else if (ScorePercentage < 90 && ScorePercentage >= 80)
        {
            RankImage.texture = RankImageSoruce[1];
        }
        else if (ScorePercentage < 80 && ScorePercentage >= 70)
        {
            RankImage.texture = RankImageSoruce[2];
        }
        else if (ScorePercentage < 70)
        {
            RankImage.texture = RankImageSoruce[3];
        }

        //Artwork
        byte[]    bytes   = System.IO.File.ReadAllBytes("Music/" + MusicID + "/image.png");
        Texture2D texture = new Texture2D(55, 55, TextureFormat.ARGB4444, false);

        texture.LoadImage(bytes);
        texture.Compress(false);
        ArtworkImage.sprite = Sprite.Create(texture, new Rect(0f, 0f, texture.width, texture.width), new Vector2(0.5f, 0.5f));

        //Background
        sequence.Insert(2f,
                        Background.DOLocalMoveX(-410f, 0.5f).SetEase(Ease.OutQuint)
                        );
        //Panel
        sequence.Insert(2.5f,
                        Panel.DOLocalMoveX(-490f, 0.5f).SetEase(Ease.OutQuint)
                        );
        //Artwork
        sequence.Insert(2.5f,
                        Artwork.DOLocalMoveY(125f, 0.5f).SetEase(Ease.OutQuint)
                        );
        sequence.Insert(2.5f,
                        DOTween.ToAlpha(() => ArtworkImage.color,
                                        color => ArtworkImage.color = color, 1f, 0.5f
                                        ).SetEase(Ease.OutQuint)
                        );
        //Result
        sequence.Insert(2.5f,
                        DOVirtual.DelayedCall(0f, () =>
                                              Result.gameObject.SetActive(true)
                                              )
                        );
        sequence.Insert(2.5f,
                        Result.DOLocalMoveX(250f, 0.5f).SetEase(Ease.OutQuint)
                        );

        //Judgement
        sequence.Insert(2.5f,
                        DOVirtual.DelayedCall(0f, () =>
                                              Judgement[0].gameObject.SetActive(true)
                                              )
                        );
        sequence.Insert(2.5f,
                        DOVirtual.DelayedCall(0f, () =>
                                              Judgement[1].gameObject.SetActive(true)
                                              )
                        );
        sequence.Insert(2.5f,
                        DOVirtual.DelayedCall(0f, () =>
                                              Judgement[2].gameObject.SetActive(true)
                                              )
                        );
        sequence.Insert(2.5f,
                        DOVirtual.DelayedCall(0f, () =>
                                              Judgement[3].gameObject.SetActive(true)
                                              )
                        );
        sequence.Insert(2.5f,
                        DOVirtual.DelayedCall(0f, () =>
                                              Judgement[4].gameObject.SetActive(true)
                                              )
                        );
        for (int i = 0; i < 5; i++)
        {
            sequence.Insert(3f + 0.25f * i,
                            Judgement[i].DOLocalMoveX(180f - i * 20f, 0.5f).SetEase(Ease.OutQuint)
                            );
        }

        //Score
        sequence.Insert(2.5f,
                        DOVirtual.DelayedCall(0f, () =>
                                              Score.gameObject.SetActive(true)
                                              )
                        );
        sequence.Insert(4.5f,
                        Score.DOLocalMoveX(250f, 1f).SetEase(Ease.OutQuint)
                        );

        int ScoreNumber = 0;

        sequence.Insert(5f,
                        DOTween.To(() => ScoreNumber, (n) => ScoreNumber = n, ScoreValue, 1.5f)
                        .OnUpdate(() => Score.Find("Score").GetComponent <TextMeshProUGUI>().text = LintNumber(7, ScoreNumber))
                        );
        sequence.Insert(5f,
                        DOVirtual.DelayedCall(0f, () =>
                                              audioSource.PlayOneShot(audioSource.clip)
                                              )
                        );
        sequence.Insert(5.5f,
                        DOVirtual.DelayedCall(0f, () => {
            Score.Find("ScorePercentage").GetComponent <Text>().text = ((int)ScorePercentage).ToString() + "%";
            if (CurrentHighscore < ScoreValue)
            {
                NewRecord.gameObject.SetActive(true);
            }
        }
                                              )
                        );

        int ComboNumber = 0;

        sequence.Insert(5.25f,
                        DOTween.To(() => ComboNumber, (n) => ComboNumber = n, ComboValue, 1f)
                        .OnUpdate(() => Score.Find("Combo").GetComponent <TextMeshProUGUI>().text = LintNumber(4, ComboNumber))
                        );
        sequence.Insert(5.5f,
                        DOVirtual.DelayedCall(0f, () => {
            Score.Find("ComboPercentage").GetComponent <Text>().text = ((int)ComboPercentage).ToString() + "%";
        }
                                              )
                        );

        //Rank
        sequence.Insert(5.5f,
                        DOTween.ToAlpha(() => RankImage.color,
                                        color => RankImage.color = color, 1f, 0.5f
                                        ).SetEase(Ease.OutQuint)
                        );
        sequence.Insert(5.5f,
                        Rank.DOScale(new Vector3(1f, 1f, 1f), 0.5f).SetEase(Ease.OutQuint)
                        );

        //Finish
        sequence.Insert(7f,
                        DOTween.ToAlpha(() => PressButton.color,
                                        color => PressButton.color = color, 1f, 0.5f
                                        ).SetEase(Ease.OutQuint)
                        );
        sequence.Insert(7f,
                        DOVirtual.DelayedCall(0f, () =>
                                              flag = true
                                              )
                        );

        if (!DebugMode)
        {
            float           timeDelay = 0.5f;
            GameObject[]    changer   = new GameObject[4];
            RectTransform[] rectTran  = new RectTransform[4];

            for (int i = 0; i < 4; i++)
            {
                changer[i]  = GameObject.Find("SceneChangeEnd").transform.Find(i.ToString()).gameObject;
                rectTran[i] = changer[i].GetComponent <RectTransform>();
            }

            sceneChangeTween = DOTween.Sequence();
            for (int i = 0; i < 4; i++)
            {
                sceneChangeTween.Insert(1 + 0.25f * (3 - i),
                                        rectTran[i].DOLocalMoveX(-1280, timeDelay).SetEase(Ease.OutQuint)
                                        );
            }

            sceneChangeTween.Join(
                DOVirtual.DelayedCall(6f, () =>
            {
                Destroy(SceneChange);
                sequence.Play();
            })
                );
        }
    }