コード例 #1
0
ファイル: EditModeState.cs プロジェクト: tTomonori/KeyNote
 //歌詞を削除する
 protected bool tryDeleteLyrics(KeyTime aTime)
 {
     if (aTime.mQuarterBeat < 0)
     {
         return(false);
     }
     float[] tNeighbor = parent.mScore.getNeighborTime(aTime);
     foreach (float tQuarterBeat in tNeighbor)
     {
         if (parent.mScore.getLyrics(new KeyTime(tQuarterBeat)) == null)
         {
             continue;                                                            //歌詞がない
         }
         if (parent.mScore.getNote(new KeyTime(tQuarterBeat)) != null)
         {
             //消そうとした歌詞に音符がついてる
             AlartCreater.alart("音符に付属した歌詞は削除できません");
             return(false);
         }
         //削除できる
         mCommandList.run(new DeleteLyricsCommand(new KeyTime(tQuarterBeat)));
         parent.mScore.resetBars();
         return(true);
     }
     return(false);
 }
コード例 #2
0
    void Start()
    {
        ScoreItemList tList       = new ScoreItemList();
        MyScrollView  tScrollView = GameObject.Find("scoreItemList").GetComponent <MyScrollView>();

        MyScrollView.Option tOption = new MyScrollView.Option();
        tOption.elementSize = new Vector2(12, 1);
        tOption.contentSize = new Vector2(12, 6);
        tOption.doubleTap   = false;
        tOption.sortable    = true;
        tScrollView.init(tList, tOption);

        Subject.addObserver(new Observer("browseScoreListMain", (message) => {
            if (message.name == "endBrowseButtonPushed")//譜面一覧を閉じる
            {
                MySceneManager.changeScene("selection");
                return;
            }
            if (message.name == "editButtonPushed") //編集へ移る
            {
                MySceneManager.changeScene("edit", new Arg(new Dictionary <string, object>()
                {
                    { "scoreData", DataFolder.loadScoreData(message.getParameter <string>("file")) }
                }));
                return;
            }
            if (message.name == "sortButtonPushed")//譜面の並び替え適用
            {
                List <Arg> tMusicList = tList.getCompletedMusicList();
                MusicList.updateList(tMusicList);
                AlartCreater.alart("曲の並びを保存しました");
            }
        }));
    }
コード例 #3
0
ファイル: EditModeState.cs プロジェクト: tTomonori/KeyNote
        //bpm変更イベントを削除
        protected bool tryDeleteChangeBpm(KeyTime aTime)
        {
            if (aTime.mQuarterBeat < 0)
            {
                return(false);
            }
            if (aTime.mQuarterBeat < 1)
            {
                AlartCreater.alart("先頭のBPMは削除できません");
                return(false);
            }
            List <Arg> tList = MusicScoreData.getChangeBpmInBar(aTime);

            foreach (Arg tData in tList)
            {
                if (tData.get <float>("time") != aTime.mQuarterBeat)
                {
                    continue;
                }
                //削除するイベントが見つかった
                mCommandList.run(new DeleteChangeBpmCommand(aTime));
                parent.mScore.resetBars();
                return(true);
            }
            return(false);
        }
コード例 #4
0
    void Start()
    {
        tLyricsText = GameObject.Find("lyricsForm").GetComponent <InputField>();
        Arg tArg = MySceneManager.getArg("editLyrics");

        tLyricsText.text = MusicScoreData.mAllLyrics;
        Subject.addObserver(new Observer("editLyricsMain", (message) => {
            if (message.name == "closeLyricsEditorButtonPushed")
            {
                MySceneManager.closeScene("editLyrics", null);
                return;
            }
            if (message.name == "applyLyricsButtonPushed")
            {
                MusicScoreData.mAllLyrics = tLyricsText.text;
                List <Arg> tNotes;
                List <Arg> tLyrics;
                string tError = LyricsStringConverter.convert(tLyricsText.text, out tNotes, out tLyrics);
                if (tError != "")
                {
                    AlartCreater.alart(tError);
                    return;
                }
                tError = MusicScoreData.applyLyrics(tNotes, tLyrics);
                if (tError != "")
                {
                    AlartCreater.alart(tError);
                    return;
                }
                AlartCreater.alart("歌詞を適用しました");
                return;
            }
        }));
    }
コード例 #5
0
 public override void getMessage(Message aMessage)
 {
     if (aMessage.name == "clickNote" || aMessage.name == "clickLyrics")
     {
         float tRust = MusicScoreData.quarterBeatToMusicTime(aMessage.getParameter <float>("time"));
         if (tRust < 0)
         {
             AlartCreater.alart("音声再生開始前の位置です");
             return;
         }
         if (parent.mPlayer.mMusicLength <= tRust)
         {
             AlartCreater.alart("音声の再生が終了している位置です");
             return;
         }
         AlartCreater.alart("フォームの値を更新しました");
         mSettingForm.setRustForm(tRust.ToString());
         parent.changeState(new EditState(parent));
         return;
     }
     if (aMessage.name == "selectRustFromScoreButtonPushed") //譜面からサビの開始位置を選択するボタン
     {
         parent.changeState(new EditState(parent));
         return;
     }
 }
コード例 #6
0
 void Start()
 {
     Subject.addObserver(new Observer("inputChangeBpmValueFormMain", (message) => {
         if (message.name == "cancelInputChangeBpmValueButtonPushed")
         {
             MySceneManager.closeScene("inputChangeBpmValueForm", new Arg((new Dictionary <string, object>()
             {
                 { "change", false }
             })));
             return;
         }
         if (message.name == "okInputChangeBpmValueButtonPushed")
         {
             string tInputValue = getBpmValue();
             float tBpm         = -1;
             if (!float.TryParse(tInputValue, out tBpm))
             {
                 AlartCreater.alart("BPMは数値で入力してください");
                 return;
             }
             if (tBpm < 10 || 250 < tBpm)
             {
                 AlartCreater.alart("BPMは10から250のみ有効です");
                 return;
             }
             MySceneManager.closeScene("inputChangeBpmValueForm", new Arg((new Dictionary <string, object>()
             {
                 { "change", true },
                 { "bpm", tBpm }
             })));
             return;
         }
     }));
 }
コード例 #7
0
ファイル: EditModeState.cs プロジェクト: tTomonori/KeyNote
        //bpm変更イベントを生成
        protected bool tryCreateChangeBpm(KeyTime aTime)
        {
            if (aTime.mQuarterBeat < 0)
            {
                return(false);
            }
            if (1 <= aTime.mQuarterBeat && aTime.mQuarterBeat < MusicScoreData.mStartPlayMusicTime.mQuarterBeat)
            {
                AlartCreater.alart("音声再生位置より前には配置できません");
                return(false);
            }
            //編集画面の操作を無効にする
            parent.changeState(new InitialState(parent));
            //変更前の値があるなら取得する
            float      tPreBpm = -1;
            List <Arg> tList   = MusicScoreData.getChangeBpmInBar(aTime);

            foreach (Arg tData in tList)
            {
                if (tData.get <float>("time") != aTime.mQuarterBeat)
                {
                    continue;
                }
                //イベントが見つかった
                tPreBpm = tData.get <float>("bpm");
                break;
            }
            //bpm値の入力を受け付ける
            MySceneManager.openScene("inputChangeBpmValueForm", new Arg(new Dictionary <string, object>()
            {
                { "defaultValue", tPreBpm }
            }), null, (aArg) => {
                if (aArg.get <bool>("change"))
                {
                    mCommandList.run(new CreateChangeBpmCommand(aTime, aArg.get <float>("bpm")));
                    parent.mScore.resetBars();
                }
                parent.changeState(new EditState(parent));
            });
            return(true);
        }
コード例 #8
0
    private void Start()
    {
        Arg tArg = MySceneManager.getArg("musicConfig");

        //初期値設定
        if (!tArg.get <bool>("new"))
        {
            GameObject.Find("title").GetComponentInChildren <InputField>().text     = tArg.get <string>("title");
            GameObject.Find("file").GetComponentInChildren <InputField>().text      = tArg.get <string>("savePath");
            GameObject.Find("music").GetComponentInChildren <InputField>().text     = tArg.get <string>("music").Substring(0, tArg.get <string>("music").Length - 4);
            GameObject.Find("thumbnail").GetComponentInChildren <InputField>().text = tArg.get <string>("thumbnail");
            GameObject.Find("back").GetComponentInChildren <InputField>().text      = tArg.get <string>("back");
            GameObject.Find("movie").GetComponentInChildren <InputField>().text     = tArg.get <string>("movie");
        }
        Subject.addObserver(new Observer("configMain", (message) => {
            if (message.name == "cancelButtonPushed")
            {
                MySceneManager.closeScene("musicConfig", new Arg(new Dictionary <string, object>()
                {
                    { "ok", false }
                }));
                return;
            }
            if (message.name != "okButtonPushed")
            {
                return;
            }
            Arg tData = getData();
            //必須のデータが入力されているか確認
            //title
            if (tData.get <string>("title") == "")
            {
                AlartCreater.alart("タイトルが入力されていません");
                return;
            }
            //file
            if (tData.get <string>("file") == "")
            {
                AlartCreater.alart("譜面ファイル名が入力されていません");
                return;
            }
            if (tArg.get <bool>("new") || tData.get <string>("file") != tArg.get <string>("loadPath"))
            {
                if (DataFolder.existScoreData(tData.get <string>("file")))
                {
                    AlartCreater.alart("譜面ファイル名が既に使われています");
                    return;
                }
            }
            //music
            if (tData.get <string>("music") == ".wav")
            {
                AlartCreater.alart("音声ファイル名が入力されていません");
                return;
            }
            if (!DataFolder.existMusic(tData.get <string>("music")))
            {
                AlartCreater.alart("音声ファイルが見つかりません");
                return;
            }
            //必須条件クリア
            //譜面データ作成
            MusicScoreFileData tNewScore = new MusicScoreFileData();
            tNewScore.title     = tData.get <string>("title");
            tNewScore.savePath  = tData.get <string>("file");
            tNewScore.music     = tData.get <string>("music");
            tNewScore.thumbnail = tData.get <string>("thumbnail");
            tNewScore.back      = tData.get <string>("back");
            tNewScore.movie     = tData.get <string>("movie");
            Arg tArgument       = new Arg(new Dictionary <string, object>()
            {
                { "ok", true }, { "scoreData", tNewScore }
            });
            MySceneManager.closeScene("musicConfig", tArgument);
        }));
    }
コード例 #9
0
 public override void enter()
 {
     AlartCreater.alart("サビの開始位置をクリックしてください");
     GameObject.Find("selectRustFromScoreButton").GetComponent <LightButton>().hold();
 }
コード例 #10
0
        public override void getMessage(Message aMessage)
        {
            //logClickPosition(aMessage);
            if (aMessage.name == "editPlayButtonPushed")//編曲再生ボタン
            {
                parent.changeState(new EditPlayState(parent));
                return;
            }
            if (aMessage.name == "testPlayButtonPushed")//テスト再生ボタン
            {
                parent.changeState(new TestPlayState(parent));
                return;
            }
            if (aMessage.name == "measureBpmButtonPushed") //bpm測定ボタン
            {
                parent.changeState(new InitialState(parent));
                MySceneManager.openScene("measureBpm", new Arg(new Dictionary <string, object>()
                {
                    { "second", MusicScoreData.quarterBeatToMusicTime(parent.mScore.mCurrentQuarterBeat) },
                    { "staticBpm", MusicScoreData.getBpm(parent.mScore.mCurrentQuarterBeat) }
                }), null, (obj) => {
                    parent.changeState(new EditState(parent));
                });
                return;
            }
            if (aMessage.name == "editLyricsButtonPushed")//歌詞編集ボタン
            {
                parent.changeState(new InitialState(parent));
                MySceneManager.openScene("editLyrics", null, null, (aArg) => {
                    mCommandList.reset();
                    parent.mScore.resetBars();
                    parent.changeState(new EditState(parent));
                });
                return;
            }
            if (aMessage.name == "configButtonPushed")//File設定ボタン
            {
                parent.changeState(new InitialState(parent));
                MySceneManager.openScene("musicConfig", new Arg(new Dictionary <string, object>()
                {
                    { "new", false },
                    { "title", MusicScoreData.mTitle },
                    { "savePath", MusicScoreData.mSavePath },
                    { "music", MusicScoreData.mMusicFileName },
                    { "thumbnail", MusicScoreData.mThumbnail },
                    { "back", MusicScoreData.mBack },
                    { "movie", MusicScoreData.mMovie },
                    { "loadPath", MusicScoreData.mLoadPath }
                }), null, (aArg) => {
                    if (aArg.get <bool>("ok"))
                    {
                        MusicScoreFileData tData = aArg.get <MusicScoreFileData>("scoreData");
                        if (MusicScoreData.mMusicFileName != tData.music)//音声を変更
                        {
                            MusicPlayer tPlayer = MyBehaviour.create <MusicPlayer>();
                            tPlayer.setAudio(DataFolder.loadMusic(tData.music));
                            parent.mPlayer.changeMusic(tPlayer);
                        }
                        MusicScoreData.mTitle         = tData.title;
                        MusicScoreData.mSavePath      = tData.savePath;
                        MusicScoreData.mMusicFileName = tData.music;
                        MusicScoreData.mThumbnail     = tData.thumbnail;
                        MusicScoreData.mBack          = tData.back;
                        MusicScoreData.mMovie         = tData.movie;
                        //譜面の背景更新
                        parent.resetScoreBackground();
                    }
                    parent.changeState(new EditState(parent));
                });
                return;
            }
            if (aMessage.name == "selectRustFromScoreButtonPushed")//譜面からサビの開始位置を選択するボタン
            {
                parent.changeState(new SelectRustFromScoreState(parent));
                return;
            }
            if (aMessage.name == "applySettingButtonPushed") //設定適用ボタン
            {
                if (mSettingForm.isChanged())                //変更がある時だけ適用
                //marginが不正な値になっていないか
                {
                    if (mSettingForm.mMargin < 0)
                    {
                        AlartCreater.alart("Marginは0未満にできません");
                        return;
                    }
                    if (KeyTime.secondsToQuarterBeat(mSettingForm.mMargin, MusicScoreData.mInitialBpm) >= mSettingForm.mRhythm * 4)
                    {
                        AlartCreater.alart("Marginが第一小節の長さを超えています");
                        return;
                    }
                    //rustが不正な値になっていないか
                    if (mSettingForm.mRust < 0)
                    {
                        AlartCreater.alart("サビの位置は0以上で指定してください");
                        return;
                    }
                    if (parent.mPlayer.mMusicLength <= mSettingForm.mRust)
                    {
                        AlartCreater.alart("サビの位置が音声の長さを超えています");
                        return;
                    }
                    AlartCreater.alart("設定を適用しました");
                    mCommandList.run(new ApplySettingCommand(mSettingForm));
                    parent.mScore.resetBars();
                }
                else
                {
                    AlartCreater.alart("値が変更されていません");
                }
                return;
            }
            if (aMessage.name == "resetSettingButtonPushed")//設定リセットボタン
            {
                mSettingForm.reset();
                return;
            }
            if (aMessage.name == "saveButtonPushed")//保存ボタン
            {
                parent.changeState(new SaveState(parent));
                return;
            }
            //譜面クリック
            switch (mCreateObjectType)
            {
            case CreateObjectType.note:
                if (aMessage.name == "clickNote" || aMessage.name == "clickLyrics")
                {
                    tryCreateNote(new KeyTime(aMessage.getParameter <float>("time")));
                    return;
                }
                if (aMessage.name == "RightClickNote" || aMessage.name == "RightClickLyrics")
                {
                    tryDeleteNote(new KeyTime(aMessage.getParameter <float>("time")));
                    return;
                }
                break;

            case CreateObjectType.lyrics:
                if (aMessage.name == "clickNote" || aMessage.name == "clickLyrics")
                {
                    tryCreateLyrics(new KeyTime(aMessage.getParameter <float>("time")));
                    return;
                }
                if (aMessage.name == "RightClickNote" || aMessage.name == "RightClickLyrics")
                {
                    tryDeleteLyrics(new KeyTime(aMessage.getParameter <float>("time")));
                    return;
                }
                break;

            case CreateObjectType.changeBpm:
                if (aMessage.name == "clickNote" || aMessage.name == "clickLyrics")
                {
                    tryCreateChangeBpm(new KeyTime(aMessage.getParameter <float>("time")));
                    return;
                }
                if (aMessage.name == "RightClickNote" || aMessage.name == "RightClickLyrics")
                {
                    tryDeleteChangeBpm(new KeyTime(aMessage.getParameter <float>("time")));
                    return;
                }
                break;

            case CreateObjectType.triplet:
                if (aMessage.name == "clickNote" || aMessage.name == "clickLyrics")
                {
                    tryCreateTriplet(new KeyTime(aMessage.getParameter <float>("time")));
                    return;
                }
                if (aMessage.name == "RightClickNote" || aMessage.name == "RightClickLyrics")
                {
                    tryDeleteTriplet(new KeyTime(aMessage.getParameter <float>("time")));
                    return;
                }
                break;
            }
        }