void Update() { if (!initialized) { return; } enemy_remaining.Value = EnemyService.remainig(); //Debug.Log("enemy_remaining.Value" + enemy_remaining.Value.ToString()); }
public static void startSpawn() { // ゲームステージサービスから敵の数もらう int enemy_num = GameStageService.status("enemy_num"); // スポーン中なら現在のスポーンを中止 stopSpawn(); Debug.Log("EnemyService.startSpawn()"); /* * // 1秒に1回、x回まで処理する(敵の出現数が上限を超えてたら待つ) * spawn_disposable = Observable.Interval(System.TimeSpan.FromSeconds(1)).Take(enemy_num).Subscribe(y => { * // ランクに合わせて敵を生成 * EnemyEntity enemy = EnemyService.create(); * // 左から出るか前から出るかを決定 * SpawnerPoint point = EnemyService.random_pos(); * // 敵オブジェクトに設定 * EnemyService.set_direction(enemy, point); * // 出撃 * EnemyService.activate(enemy); * }); */ int spawn_count = 0; // (敵の出現数が上限を超えてたら待つ)が出来ていないので修正必要 // スポーンタイマーは基本的に無制限に動作するようにし、動作内で敵を上限まで出現させたかどうか判定させる // 出現済みで生きてる敵の数を数えて、出現上限に達していたら次まで待つ // 出現済みで生きてる敵の数が出現上限数以下で、かつ生成上限にまだ達していなければ敵を生成 spawn_disposable = Observable.Interval(System.TimeSpan.FromSeconds(1)).Subscribe(x => { // 生成上限に達していたら終了 if (enemy_num <= spawn_count) { return; } spawn_count += 1; // アクティブな敵が出現上限に達していたら終了 if (spawn_limit <= GameObject.FindGameObjectsWithTag("Enemy").Length) { return; } // ランクに合わせて敵を生成 EnemyEntity enemy = EnemyService.create(); // 左から出るか前から出るかを決定 SpawnerPoint point = EnemyService.random_pos(); // 敵オブジェクトに設定 EnemyService.set_direction(enemy, point); // 出撃 EnemyService.activate(enemy); }); }
async public static void game_over() { // プレイヤー操作禁止 Time.timeScale = 0f; // 画面フェードを有効化(有効な間はuGUIのボタンが押せないので注意) GuiService.fadeEnable(); // 画面を半フェード await GuiService.fadeBacground(0.5f); // ゲームオーバー表示 GuiService.showGameOver(); MessageBroker.Default.Publish <PlaySe>(new PlaySe { name = "GameOver" }); await in_fade(game_over_room_adjust, game_over_strength_adjust, game_over_nums_adjust); // 敵を全部消す EnemyService.destroyEnemy(); // プレイヤー復帰 Time.timeScale = 1f; await PlayerService.respawn(); Time.timeScale = 0f; // GameOver表示クリア GuiService.hideGameOver(); // 画面のフェードを戻す await GuiService.fadeBacground(0f); // 画面フェードを無効化 GuiService.fadeDisable(); // ドア開ける // 敵スポーン開始 EnemyService.startSpawn(); // プレイヤー操作再開 Time.timeScale = 1f; }
async public static void next(int add_strength, int add_num) { // プレイヤー操作禁止 Time.timeScale = 0f; // 画面フェードを有効化(有効な間はuGUIのボタンが押せないので注意) GuiService.fadeEnable(); // 画面を半フェード await GuiService.fadeBacground(0.5f); // ステージクリア表示 GuiService.showStageClear(_room_clear_count); MessageBroker.Default.Publish <PlaySe>(new PlaySe { name = "RoomClear" }); await in_fade(default_clear_add, add_strength, add_num); // RoomClear表示クリア GuiService.hideStageClear(); // 画面のフェードを戻す await GuiService.fadeBacground(0f); // 画面フェードを無効化 GuiService.fadeDisable(); // ドア開ける // 敵スポーン開始 EnemyService.startSpawn(); // プレイヤー操作再開 Time.timeScale = 1f; }
public static IEnumerator in_fade(int add_clear_count, int add_strength, int add_num) { // 操作があるまで待つ while (!Input.GetMouseButtonUp(0) && !Input.GetKeyUp(KeyCode.Space) && !Input.GetKeyUp(KeyCode.Return)) { yield return(null); } // 画面をフルフェード yield return(GuiService.fadeBacground(1f)); Time.timeScale = 1f; // プレイヤー再初期化 PlayerService.reset(); yield return(new WaitForEndOfFrame()); // BGMチェック MessageBroker.Default.Publish <BgmCheck>(new BgmCheck()); yield return(null); // 次のステージ情報更新 _room_clear_count += add_clear_count; if (_room_clear_count < 1) { _room_clear_count = 1; } _enemy_strength += add_strength; if (_enemy_strength < 1) { _enemy_strength = 1; } _enemy_num += add_num; if (_enemy_num < 1) { _enemy_num = 1; } // ドア閉める // NextRoomのエフェクトを消去 EffectService.nextRoomOff(); yield return(new WaitForEndOfFrame()); // 地面に落ちてる装備品を削除 ItemEquipService.ClearTarget(); ItemEquipService.destroyEquipItem(); yield return(new WaitForEndOfFrame()); // 家具配置範囲再初期化 EffectiveFloorService.reset(); // 家具再初期化 FieldObjectService.reset(); yield return(new WaitForEndOfFrame()); // 敵削除 EnemyService.destroyEnemyDead(); yield return(new WaitForEndOfFrame()); // リセット後の状態を保存 MessageBroker.Default.Publish <SaveDataSave>(new SaveDataSave()); yield return(new WaitForEndOfFrame()); Time.timeScale = 0f; }