/// <summary> /// 指定フレーム後に指定の関数を行うコルーチン /// ※関数はdelegate型で宣言したものにラムダ式を用いて代入している /// </summary> /// <param name="frame">待つフレーム</param> /// <param name="func">行う関数</param> /// <returns>1フレームずつ値を返す</returns> private IEnumerator RunCoroutine(int frame, routineFunc func) { for (int i = 0; i < frame; i++) { yield return(new WaitForEndOfFrame()); } func(); }
/// <summary> /// タイトルシーンに遷移するためにカウンタを加算する関数 /// </summary> private void ReturnOpeningScene() { backcnt++; if (backcnt == BACK_OP) { FadeIO.fadeIo.SetFadeImage(FadeIO.white); FadeIO.fadeIo.FadeOut(Menu.FADE); BGMMaster.AudioFadeOutStart(Menu.FADE); SEMaster.AudioFadeOutStart(Menu.FADE); runningFunc = () => ReturnBackScene(); StartCoroutine(RunCoroutine(Menu.FADE, runningFunc)); } }
/// <summary> /// ゲーム終了 /// </summary> void GameEnd() { if (KeyLoader.keyLoader.A) { SEMaster.Play(KeyInputSE.keyInoutSE.GetClip(KeyInputSE.Type.Cancel)); menuSelect = false; KeyLoader.keyLoader.SetKeyWait(Menu.FADE); SaveData.AllSave(); FadeIO.fadeIo.SetFadeImage(FadeIO.black); FadeIO.fadeIo.FadeOut(Menu.FADE); BGMMaster.AudioFadeOutStart(Menu.FADE); SEMaster.AudioFadeOutStart(Menu.FADE); runningFunc = () => Shutdown(); StartCoroutine(RunCoroutine(Menu.FADE, runningFunc)); } }
/// <summary> /// ゲーム開始 /// </summary> void GameStart() { if (KeyLoader.keyLoader.A) { SEMaster.Play(KeyInputSE.keyInoutSE.GetClip(KeyInputSE.Type.Decide)); menuSelect = false; KeyLoader.keyLoader.SetKeyWait(Menu.FADE); StageSelect.stage = Menu.MONSTER; SaveData.AllSave(); FadeIO.fadeIo.SetFadeImage(FadeIO.black); FadeIO.fadeIo.FadeOut(Menu.FADE); BGMMaster.AudioFadeOutStart(Menu.FADE); SEMaster.AudioFadeOutStart(Menu.FADE); runningFunc = () => LoadNextScene(); StartCoroutine(RunCoroutine(Menu.FADE, runningFunc)); } }
/// <summary> /// フロアを選ぶ関数 /// </summary> private void SelectFloor() { Floor_Draw(); //選んだステージのフロアに入る処理 if (!floorMove.isMoving && !KeyLoader.keyLoader.StickWait && KeyLoader.keyLoader.A) { SEMaster.Play(KeyInputSE.keyInoutSE.GetClip(KeyInputSE.Type.Decide)); KeyLoader.keyLoader.SetKeyWait(Menu.FADE); KeyLoader.keyLoader.SetStickWait(Menu.FADE); FadeIO.fadeIo.FadeOut(Menu.FADE); BGMMaster.AudioFadeOutStart(Menu.FADE); SEMaster.AudioFadeOutStart(Menu.FADE); runningFunc = () => LoadGameScene(); StartCoroutine(RunCoroutine(Menu.FADE, runningFunc)); } //ステージ選択に戻る処理 else if (!floorMove.isMoving && !KeyLoader.keyLoader.StickWait && KeyLoader.keyLoader.B) { mode = STAGE_SELECT; SEMaster.Play(KeyInputSE.keyInoutSE.GetClip(KeyInputSE.Type.Cancel)); StartCoroutine(floorMove.SlideOut()); KeyLoader.keyLoader.SetStickWait(Menu.FADE); stCur.Set(true); } //ポーズ画面を開く処理 else if (!floorMove.isMoving && !KeyLoader.keyLoader.StickWait && KeyLoader.keyLoader.StartKey) { temp = mode; mode = PAUSE; SEMaster.Play(KeyInputSE.keyInoutSE.GetClip(KeyInputSE.Type.Pause)); pause.Open(); //画面を開く処理 } //ジョイスティック入力:上 else if (!floorMove.isMoving && !KeyLoader.keyLoader.StickWait && KeyLoader.keyLoader.joyStickAxis.y > 0) { int before = floor; //一つ上のフロアが未開放フロアまたはフロア6ならフロア1に戻す if (ClearFloor[stage] <= floor || floor >= Menu.FLOOR6) { floor = Menu.FLOOR1; } else { floor++; } if (before != floor) { SEMaster.Play(KeyInputSE.keyInoutSE.GetClip(KeyInputSE.Type.Move)); } KeyLoader.keyLoader.SetStickWait(RESET_FLOOR_FRAME); } //ジョイスティック入力:下 else if (!floorMove.isMoving && !KeyLoader.keyLoader.StickWait && KeyLoader.keyLoader.joyStickAxis.y < 0) { int before = floor; //1階目で操作した際に挑戦可能な最高フロアに戻す処理 if (floor == Menu.FLOOR1) { if (ClearFloor[stage] == Menu.FLOOR_NUM) { floor = Menu.FLOOR6; } else { floor = ClearFloor[stage]; } } else { floor--; } if (before != floor) { SEMaster.Play(KeyInputSE.keyInoutSE.GetClip(KeyInputSE.Type.Move)); } KeyLoader.keyLoader.SetStickWait(RESET_FLOOR_FRAME); } }
/// <summary> /// ステージを選ぶ関数 /// </summary> private void SelectStage() { //ステージを決定する処理 if (!mainCameraObj.isRotation && !floorMove.isMoving && !KeyLoader.keyLoader.StickWait && KeyLoader.keyLoader.A) { //modeを変更し、フロア選択に処理を移る mode = FLOOR_SELECT; SEMaster.Play(KeyInputSE.keyInoutSE.GetClip(KeyInputSE.Type.Decide)); StartCoroutine(floorMove.SlidePut()); floorBackSprite.SetImage(); BestTimeNum.SetBestTime(); floorTop.SetImage(); floor = Menu.FLOOR1; floorNameManager.SetName(); stCur.Set(false); KeyLoader.keyLoader.SetStickWait(RESET_STAGE_FRAME); } //タイトルに戻る処理 else if (!mainCameraObj.isRotation && !floorMove.isMoving && !KeyLoader.keyLoader.StickWait && KeyLoader.keyLoader.B) { SEMaster.Play(KeyInputSE.keyInoutSE.GetClip(KeyInputSE.Type.Cancel)); KeyLoader.keyLoader.SetKeyWait(Menu.FADE); FadeIO.fadeIo.FadeOut(Menu.FADE); BGMMaster.AudioFadeOutStart(Menu.FADE); SEMaster.AudioFadeOutStart(Menu.FADE); runningFunc = () => LoadTitleScene(); StartCoroutine(RunCoroutine(Menu.FADE, runningFunc)); KeyLoader.keyLoader.SetStickWait(RESET_STAGE_FRAME); } //ポーズ画面を開く処理 else if (!mainCameraObj.isRotation && !floorMove.isMoving && !KeyLoader.keyLoader.StickWait && KeyLoader.keyLoader.StartKey) { temp = mode; mode = PAUSE; SEMaster.Play(KeyInputSE.keyInoutSE.GetClip(KeyInputSE.Type.Pause)); pause.Open(); stCur.Set(false); } //ジョイスティック入力:右 else if (!mainCameraObj.isRotation && !KeyLoader.keyLoader.StickWait && KeyLoader.keyLoader.joyStickAxis.x > 0) { if (stage == Menu.GOD) { stage = Menu.MONSTER; } else { stage++; } SEMaster.Play(stageSelectSE); StartCoroutine(mainCameraObj.Right(stage)); StartCoroutine(stNameObj.TargetFrameMoveRightReset(CAMERA_ROTATION_TIME)); KeyLoader.keyLoader.SetStickWait(RESET_STAGE_FRAME); } //ジョイスティック入力:左 else if (!mainCameraObj.isRotation && !KeyLoader.keyLoader.StickWait && KeyLoader.keyLoader.joyStickAxis.x < 0) { if (stage == Menu.MONSTER) { stage = Menu.GOD; } else { stage--; } SEMaster.Play(stageSelectSE); StartCoroutine(mainCameraObj.Left(stage)); StartCoroutine(stNameObj.TargetFrameMoveLeftReset(CAMERA_ROTATION_TIME)); KeyLoader.keyLoader.SetStickWait(RESET_STAGE_FRAME); } }