//歌詞を削除する 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); }
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("曲の並びを保存しました"); } })); }
//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); }
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; } })); }
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; } }
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; } })); }
//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); }
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); })); }
public override void enter() { AlartCreater.alart("サビの開始位置をクリックしてください"); GameObject.Find("selectRustFromScoreButton").GetComponent <LightButton>().hold(); }
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; } }