Пример #1
0
    //-----------------------------------------------------------------
    //! @summary   設定データの取得
    //!
    //! @return    設定データ
    //-----------------------------------------------------------------
    public PiarhythmDatas.OptionData GetOptionData()
    {
        // データをまとめる
        PiarhythmDatas.OptionData optionData = ScriptableObject.CreateInstance <PiarhythmDatas.OptionData>();
        optionData.m_tempDatas    = m_tempoDataList.ToArray();
        optionData.m_wholeMeasure = m_wholeMeasure;

        return(optionData);
    }
Пример #2
0
    //-----------------------------------------------------------------
    //! @summary   設定データから背景を作成する
    //!
    //! @parameter [optionData] 設定データ
    //!
    //! @return    なし
    //-----------------------------------------------------------------
    public void CreateMusicScoreBackGround(PiarhythmDatas.OptionData optionData)
    {
        // テンポデータの保存
        m_tempoDataList = optionData.m_tempDatas;

        // 時間を初期化
        m_wholeTime = 0.0f;

        // テンポデータ分計算する
        PiarhythmDatas.TempoData prevTempData = ScriptableObject.CreateInstance <PiarhythmDatas.TempoData>();
        prevTempData.m_tempo = 0;
        foreach (PiarhythmDatas.TempoData tempoData in optionData.m_tempDatas)
        {
            if (prevTempData.m_tempo != 0)
            {
                // 一拍当たりの時間を求める
                float beatPerTempo = 60.0f / prevTempData.m_tempo;

                for (int i = prevTempData.m_startMeasure; i < tempoData.m_startMeasure; ++i)
                {
                    // 開始時間を保存する
                    float startTime = m_wholeTime;

                    // 1小節分加算する
                    m_wholeTime += beatPerTempo * 4.0f;

                    // 背景を生成する
                    CreateMusicScoreBackGround(startTime, m_wholeTime);
                }
            }

            prevTempData = tempoData;
        }

        // 最後に残りの小節分加算する
        // 一拍当たりの時間を求める
        {
            float beatPerTempo = 60.0f / prevTempData.m_tempo;

            for (int i = prevTempData.m_startMeasure; i < optionData.m_wholeMeasure; ++i)
            {
                // 開始時間を保存する
                float startTime = m_wholeTime;

                // 1小節分加算する
                m_wholeTime += beatPerTempo * 4.0f;

                // 背景を生成する
                CreateMusicScoreBackGround(startTime, m_wholeTime);
            }
        }
    }
Пример #3
0
    //-----------------------------------------------------------------
    //! @summary   初期化処理(設定データあり)
    //!
    //! @parameter [optionData] 設定データ
    //!
    //! @return    なし
    //-----------------------------------------------------------------
    public void Start(PiarhythmDatas.OptionData optionData)
    {
        // 全体小節数の設定
        m_wholeMeasure = optionData.m_wholeMeasure;

        // テンポノードをリセットする
        m_tempoDataList.RemoveRange(1, m_tempoDataList.Count - 1);
        for (int i = 1; i < m_tempoNodeContent.childCount; ++i)
        {
            Destroy(m_tempoNodeContent.GetChild(i).gameObject);
        }

        // 最初のテンポノードを設定する
        m_tempoNodeContent.GetChild(0).GetComponent <TempoNodeController>().SetTempoData(optionData.m_tempDatas[0]);
        m_tempoDataList[0] = optionData.m_tempDatas[0];

        for (int i = 1; i < optionData.m_tempDatas.Length; ++i)
        {
            // テンポノードを作成する
            GameObject tempoNode = Instantiate(m_tempoNodePrefab);

            // コンテナに登録する
            RectTransform rectTransform = tempoNode.GetComponent <RectTransform>();
            rectTransform.SetParent(m_tempoNodeContent);

            // 親子関係を組んだことで変化した値を修正する
            rectTransform.localScale    = Vector3.one;
            rectTransform.localPosition = new Vector3(rectTransform.localPosition.x, rectTransform.localPosition.y, 0.0f);

            // コントローラーを設定する
            TempoNodeController tempoNodeController = tempoNode.GetComponent <TempoNodeController>();
            tempoNodeController.SetOptionSheetController(this);

            // テンポデータを設定する
            tempoNodeController.SetTempoData(optionData.m_tempDatas[i]);

            // データを追加する
            m_tempoDataList.Add(tempoNodeController.GetTempoData());

            // 要素番号を設定する
            tempoNodeController.SetIndex(m_tempoDataList.Count - 1);
        }

        // 全体時間を計算する
        CalculateWholeTime();

        // UIへ反映させる
        m_wholeMeasureInputField.text = m_wholeMeasure.ToString();
    }
Пример #4
0
    //-----------------------------------------------------------------
    //! @summary   楽曲データの保存処理
    //!
    //! @parameter [filePath] 保存するファイルパス
    //!
    //! @return    なし
    //-----------------------------------------------------------------
    public void SaveMusicPiece(string filePath)
    {
        // 音楽ファイルのパスを取得する
        string audioFilePath = m_bgmSheetController.GetAudioFilePath();

        // BGMデータを取得する
        PiarhythmDatas.BGMData bgmData = m_bgmSheetController.GetBGMData();

        if ((audioFilePath == null) && (bgmData != null))
        {
            audioFilePath = bgmData.m_path;
        }

        // BGMをコピーする
        if ((audioFilePath != null) && (bgmData != null))
        {
            PiarhythmUtility.CopyFile(audioFilePath, bgmData.m_path);
        }

        // ノーツデータを取得する
        PiarhythmDatas.NoteData[] notesDatas = m_notesManager.GetNotesDatas();

        // 設定データを取得する
        PiarhythmDatas.OptionData optionData = m_optionSheetController.GetOptionData();

        // 楽曲データを作成する
        PiarhythmDatas.MusicPieceData musicPieceData = ScriptableObject.CreateInstance <PiarhythmDatas.MusicPieceData>();
        musicPieceData.m_bgmData      = bgmData;
        musicPieceData.m_noteDataList = notesDatas;
        musicPieceData.m_optionData   = optionData;

        // json文字列に変換する
        string jsonString = JsonConvert.SerializeObject(musicPieceData, new JsonSerializerSettings {
            ReferenceLoopHandling = ReferenceLoopHandling.Serialize
        });

        // 拡張子があるか調べる
        if (Path.GetExtension(filePath) != ".json")
        {
            filePath += ".json";
        }

        // ファイルに書き込んで保存する
        PiarhythmUtility.WriteFileText(filePath, jsonString);
    }