public override void Update() { _Update_KeyInput(); var game_main = GameMain.GetInstance(); game_main.g3d_map.UpdateInterface(); game_main.action_manager.Update(); game_main.unit_manager.Update(); game_main.g3d_camera.Update(); // 拾い上げた選択中のユニットをゆらゆら上下させる unit_pos_offset_y_timer += 0.1; if (unit_pos_offset_y_timer > Math.PI * 2) { unit_pos_offset_y_timer -= Math.PI * 2; } if (select_unit != null) { select_unit.SetPosOffset(0, Math.Sin(unit_pos_offset_y_timer) * 1.0 + 2.5, 0); } foreach (var box in ui_unit_names) { box.Update(); } foreach (var box in ui_side_button) { box.Update(); } }
public override void Check(int map_x, int map_y, int move_power, int jump_power) { base.Check(map_x, map_y, move_power, jump_power); // この処理で概ねOK var gm = GameMain.GetInstance(); var g3d_map = gm.g3d_map; var my_u = gm.unit_manager.GetUnit(map_x, map_y); // スタート地点のユニットを自身とみなす(異なる可能性をいったん考慮せず…) // 自身を選択範囲に含めるかと // 最小距離の設定を反映させる for (var i = 0; i < squares.Count(); i++) { var s = squares[i]; var x = i % map_w; var y = i / map_w; if (is_my_target && s.step_count == 0 && s.step_count >= range_min) { var u = gm.unit_manager.GetUnit(x, y); if (u == my_u) { s.is_ok = true; s.is_pass = true; } } if (s.step_count < range_min) { s.is_ok = false; s.is_pass = false; } } }
void SetSelectUnit(Unit u) { var game_main = GameMain.GetInstance(); var g3d_map = game_main.g3d_map; if (select_unit != null) { select_unit.SetPosOffset(0, 0, 0); } if (u != null) { SoundManager.PlaySound("システム/選択", 0.5); select_unit = u; g3d_map.SetTurnOwnerCursor(u); g3d_map.is_draw_cursor_turn_owner = true; } else { SoundManager.PlaySound("システム/解除", 0.5); select_unit = null; g3d_map.SetTurnOwnerCursor(null); g3d_map.is_draw_cursor_turn_owner = true; } }
public bool _ScriptLineAnalyze(Script.ScriptLineToken t) { var game_main = GameMain.GetInstance(); //var user_interface = game_main.user_interface; //var game_base = game_main.game_base; //var g3d_camera = game_main.g3d_camera; var g3d_map = game_main.g3d_map; var unit_manager = game_main.unit_manager; //var action_manager = game_main.action_manager; //switch (t.command[0]) //{ // //case "MapData": // // { // // var size = t.command.Count(); // // for (var i = 1; i < size; i++) // // { // // setup_script_data.map_data.Add(t.GetInt(i)); // // } // // setup_script_data.map_w = size - 1; // // } // // break; //} return(false); }
public override void Draw(bool is_shadowmap) { var game_main = GameMain.GetInstance(); if (is_shadowmap) { game_main.g3d_map.Draw(); game_main.unit_manager.Draw(); game_main.action_manager.Draw(); } else { game_main.g3d_map.Draw(); game_main.unit_manager.Draw(); game_main.action_manager.Draw(); game_main.user_interface.Draw(); foreach (var box in ui_unit_names) { box.Draw(); } foreach (var box in ui_side_button) { box.Draw(); } } }
public override void Update() { _Update_KeyInput(); var game_main = GameMain.GetInstance(); game_main.g3d_map.UpdateInterface(); game_main.action_manager.Update(); game_main.unit_manager.Update(); game_main.g3d_camera.Update(); ui_box_restart.Update(); if (timer == 0) { switch (mode_name) { case "Game Over": SoundManager.PlaySound("イベント/敗北", 0.5); break; case "Stage Clear": SoundManager.PlaySound("イベント/勝利", 0.5); break; default: break; } } timer++; }
// 行動対象がいるかどうかと有効度の判定 bool IsExistActionTarget(int map_x, int map_y, out int num, out int effective_point_avg, out int effective_point_max, ActionDatas action_datas) { var game_main = GameMain.GetInstance(); var g3d_map = game_main.g3d_map; num = 0; effective_point_avg = 0; effective_point_max = 0; foreach (var action in select_unit.bt.actions) { var ad = ActionDataManager.GetActionData(action.system_name); action_target_area.range_min = ad.range_min; action_target_area.Check(map_x, map_y, ad.range_max, 1); for (var mx = 0; mx < action_target_area.map_w; mx++) { for (var my = 0; my < action_target_area.map_h; my++) { if (action_target_area.IsInside(mx, my)) { // ここで逆引き的にUnitManagerStatusを取得しているのが胡散臭い(こっちのほうが根っこだから、これもって他方がいいんじゃないかという) // 攻撃範囲だから、mxとmyはそうじゃないとしても…んーそれも微妙かな var my_um = game_main.unit_manager.GetUnitManagerStatus(select_unit.map_x, select_unit.map_y); var target_um = game_main.unit_manager.GetUnitManagerStatus(mx, my); // ターゲット判定ここでしてるのか... // 味方、敵、自身 //if (my_group != target_group) if (UnitManager.IsCheckGroup(my_um, target_um, ad.target_type)) { num++; var ep = 5; if (effective_point_max < ep) { effective_point_max = ep; } if (action_datas != null) { var a = new Action(); a.command = action.system_name; a.target = game_main.unit_manager.GetUnit(mx, my); a.target_map_x = mx; a.target_map_y = my; action_datas.actions.Add(a); } } } } } if (num > 0) { return(true); } } return(false); }
public bool is_range_only = false; // 距離のみの計算として、trueなら敵をすり抜けて計算させる(敵との距離を計るため) public RangeAreaMove(int map_w, int map_h) : base(map_w, map_h) { var game_main = GameMain.GetInstance(); var g3d_map = game_main.g3d_map; range_calc_get_height_object = g3d_map; }
public FormCreateMapToolWindow() { //this.Size = new Size(200,400); this.ClientSize = new Size(32 * 5, 400); this.Show(); this.Paint += FormCreateMapToolWindow_Paint; var game_main = GameMain.GetInstance(); var battle_map = game_main.g3d_map; button_box = new ButtonBox(this, new Size(32, 32), SetKeyWord); var i = 0; foreach (var m in battle_map.material_manager.ground_materials) { var key_word = "ground " + m.Value.key; var image_path = m.Value.image_path; if (m.Value.key == "") { continue; } if (i == 0) { select_tool_key_word = key_word; } button_box.Add(key_word, image_path); i++; } foreach (var m in battle_map.material_manager.wall_materials) { var key_word = "wall " + m.Value.key; var image_path = m.Value.image_path; if (m.Value.key == "") { continue; } button_box.Add(key_word, image_path); } button_box.Add("ground_up", @"data/image/develop/ground_up.bmp"); button_box.Add("ground_down", @"data/image/develop/ground_down.bmp"); button_box.Add("save", @"data/image/develop/save.bmp"); button_box.Add("load", @"data/image/develop/load.bmp"); button_box.Add("resize_h_m1", @"data/image/develop/resize_h_m1.bmp"); button_box.Add("resize_h_m1b", @"data/image/develop/resize_h_m1b.bmp"); button_box.Add("resize_w_m1", @"data/image/develop/resize_w_m1.bmp"); button_box.Add("resize_w_m1b", @"data/image/develop/resize_w_m1b.bmp"); button_box.Add("resize_h_p1", @"data/image/develop/resize_h_p1.bmp"); button_box.Add("resize_h_p1b", @"data/image/develop/resize_h_p1b.bmp"); button_box.Add("resize_w_p1", @"data/image/develop/resize_w_p1.bmp"); button_box.Add("resize_w_p1b", @"data/image/develop/resize_w_p1b.bmp"); }
public override void Update() { if (timer_start_wait > 0) { timer_start_wait--; return; } var g3d_map = GameMain.GetInstance().g3d_map; var t = timer; if (t >= shoot_time) { t = (int)shoot_time - 1; } var xz_time = (int)(t * correct_time_to_xz); var y_time = (int)(t * correct_time_to_y); var now_x = route_xz_list[xz_time].X * correct; var now_y = route_y_list[y_time].Y * correct; var now_z = route_xz_list[xz_time].Y * correct; // 回転で対応するのが難しかったので // 矢にモーションを付けて、角度をつけるようにした // 時刻0f:90度 → 10f:0度 →20f:-90度 // と、移り変わるので、角度から目標の時刻を算出する var motion_frame_rot = direction_list[y_time].rot * 180.0 / Math.PI; var motion_frame = 0.0f; if (motion_frame_rot > 0) // 0度 < < 90度 { motion_frame = (float)((90.0 - motion_frame_rot) / 9.0); } else if (motion_frame_rot == 0.0) // 0度 { motion_frame = (float)(10.0); } else if (motion_frame_rot == -90.0) // -90度 { motion_frame = (float)(20.0); } else // -0度 < < -90度 { motion_frame = (float)(10.0 + (-motion_frame_rot) / 9.0); } model_arrow.Pos(now_x, now_y, now_z); model_arrow.Rot(0, rot_y, 0); model_arrow.SetMotionDirectFrame(0, motion_frame); model_arrow.Update(); timer++; if (timer >= 100) { is_end = true; } }
int GetDamage(Unit atack_unit, Unit target_unit, ActionData action_data) { var dm = 0; var game_main = GameMain.GetInstance(); var range = GetRangeBySq(atack_unit, target_unit); dm = action_data.GetEffectValue(atack_unit, target_unit, range); return(dm); }
public override void Update() { _Update_KeyInput(); var game_main = GameMain.GetInstance(); game_main.g3d_map.UpdateInterface(); game_main.action_manager.Update(); game_main.unit_manager.Update(); game_main.g3d_camera.Update(); }
public SceneCreateMap() { var game_main = GameMain.GetInstance(); game_main.g3d_map = new BattleMap(game_main.game_base); game_main.g3d_camera = new G3DCamera(); tool_window = new FormCreateMapToolWindow(); game_main.g3d_map.is_use_map_cursor_wall = true; game_main.g3d_map.Load(@"data/script/stage_0_map.nst"); }
public void Move(int map_x, int map_y, bool is_right_now) { this.map_x = map_x; this.map_y = map_y; var main = GameMain.GetInstance(); main.g3d_map.Get3DPos(map_x, map_y, ref pos3d_x, ref pos3d_y, ref pos3d_z); model.Pos(pos3d_x, pos3d_y, pos3d_z); UpdateHitCheckCube(); }
public override void Draw(bool is_shadowmap) { var game_main = GameMain.GetInstance(); game_main.g3d_map.Draw(); game_main.unit_manager.Draw(); game_main.action_manager.Draw(); game_main.user_interface.Draw(); var screen = new SDrawImageByScreen(); screen.FilterGauss(2, 200); var alpha = timer * 4; if (alpha < 0) { alpha = 0; } if (alpha > 255) { alpha = 255; } screen.Draw(new SDPoint(0, 0), new Rectangle(0, 0, GameMain.WindowSizeW, GameMain.WindowSizeH), (double)alpha / 255.0, false); screen.Dispose(); alpha = timer * 4; if (alpha < 0) { alpha = 0; } if (alpha > 255) { alpha = 255; } DX.SetDrawBlendMode(DX.DX_BLENDMODE_ALPHA, alpha); { var text = mode_title; int sw = 0; int sh = 0; int sc = 0; DX.GetDrawStringSizeToHandle(out sw, out sh, out sc, text, text.Length, font.GetHandle()); var x = GameMain.WindowSizeW / 2 - sw / 2; var y = GameMain.WindowSizeH / 2 - sh / 2; DX.DrawStringFToHandle(x, y, text, DX.GetColor(255, 255, 255), font.GetHandle(), edge_color); } DX.SetDrawBlendMode(DX.DX_BLENDMODE_NOBLEND, 0); ui_box_restart.Draw(); }
UnitManager.UnitManagerStatus GetUnitManagerStatus(Unit u) { var game_main = GameMain.GetInstance(); var unit_manager = game_main.unit_manager; foreach (var ums in unit_manager.units) { if (u == ums.unit) { return(ums); } } return(null); }
public ScenePreBattle(string script_path, string next_battle_setup_script_path) { this.next_battle_setup_script_path = next_battle_setup_script_path; var game_main = GameMain.GetInstance(); game_main.g3d_map = new BattleMap(game_main.game_base); game_main.g3d_camera = new G3DCamera(); int[] map_data = { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 }; game_main.g3d_map.map_w = 5; game_main.g3d_map.map_h = 3; game_main.g3d_map.Setup(map_data); setup_script = new Script("data/script/pre_battle.nst", _ScriptLineAnalyze); setup_script.Run("Setup"); game_main.g3d_camera.SetDirectPosAndRot(DX.VGet(-8.257049f, 0f, 63.04372f), DX.VGet(0.6088442f, 0f, 0.793291f)); game_main.g3d_camera._NotToFixHard(); font_unit_list = new SFont(GameMain.main_font_name_r, 22, 0, SFont.Antialiasing.Normal, 0); font_side_button = new SFont(GameMain.main_font_name_b, 22, 0, SFont.Antialiasing.Normal, 0); game_main.g3d_map.is_draw_cursor_turn_owner = true; // ユニット一覧をボタンとして作成 var ox = GameMain.WindowSizeW - (240 + 16); var oy = 30 + 16 * 2; var w = 240; var h = 30; var i = 0; foreach (var ums in game_main.unit_manager.units) { var box = new UIBoxString(ox, oy + h * i, w, h, ums.unit.name, font_unit_list); ui_unit_names.Add(box); i++; } // { UIBoxString box; box = new UIBoxString(GameMain.WindowSizeW - (80 + 16), 16, 80, h, "完了", font_side_button); ui_side_button.Add(box); box = new UIBoxString(GameMain.WindowSizeW - (80 + 16 + 140), 16, 130, h, "ステータス", font_side_button); ui_side_button.Add(box); } }
// 敵までの距離を計る // 移動力を100扱いにして、最短距離、平均距離を計算していく // is_friendsで味方の距離と敵の距離どちらか選択できる(中立や第三勢力は不可) RangeStatus CalcRangeStatus(int map_x, int map_y, bool is_friends) { var rs = new RangeStatus(); rs.map_x = map_x; rs.map_y = map_y; rs.evaluation_min = -1; rs.evaluation_avg = 0; rs.evaluation_num = 0; var game_main = GameMain.GetInstance(); var g3d_map = game_main.g3d_map; var unit_manager = game_main.unit_manager; const int movement_force = 100; move_area.is_range_only = true; move_area.Check(map_x, map_y, movement_force, select_unit.bt.status["JUMP"].now); move_area.is_range_only = false; foreach (var um in unit_manager.units) { if (!um.unit.bt.is_alive) { continue; } if (is_friends == (select_unit_group == um.group)) { // その座標までの距離を取得 var i = um.unit.map_x + um.unit.map_y * move_area.map_w; var range = move_area.squares[i].step_count; // Console.WriteLine("\t range {0}", range); if (range > 0) { if (rs.evaluation_num == 0 || range < rs.evaluation_min) { rs.evaluation_min = range; } rs.evaluation_num++; rs.evaluation_avg += range; } } } rs.evaluation_avg = rs.evaluation_avg / rs.evaluation_num; return(rs); }
protected virtual void _NextCheck(int next_x, int next_y, int now_x, int now_y) { // 共通判定と残コストの取得 int leave_move_power = 0; if (_NextCheckBasic(next_x, next_y, now_x, now_y, ref leave_move_power) == false) { return; } // 以下専用判定 var p = next_x + next_y * map_w; var p0 = now_x + now_y * map_w; var g3d_map = GameMain.GetInstance().g3d_map; // 高低差 var height_difference = Math.Abs( range_calc_get_height(p0 % map_w, p0 / map_w, range_calc_get_height_object) - range_calc_get_height(p % map_w, p / map_w, range_calc_get_height_object)); if (height_difference > jump_power) { return; // 高低差がジャンプ力を超えている } // ユニットグループが違うため通過もできない、かどうか var u = GameMain.GetInstance().unit_manager.GetUnit(next_x, next_y); var ug = GameMain.GetInstance().unit_manager.GetUnitGroup(next_x, next_y); if (u != null && ug != _unit_group) { return; // 同じグループではないユニットがいる → 通過できない } // 侵入OK squares[p]._tmp_move_power = leave_move_power; squares[p].step_count = squares[p0].step_count + 1; _tmp_next_point_list.Add(p); if (u == null) { squares[p].is_ok = true; squares[p].is_pass = true; } else { squares[p].is_pass = true; } }
public override bool IsHit() { var game_main = GameMain.GetInstance(); var pos = game_main.game_base.input.mouse_sutatus.position; var x = ox + offset_box_x; var y = oy + offset_box_y; if ((x <= pos.X && pos.X < x + w) && (y <= pos.Y && pos.Y < y + h)) { return(true); } else { return(false); } }
public override void Update() { _Update_KeyInput(); var game_main = GameMain.GetInstance(); game_main.g3d_map.UpdateInterface(); game_main.battle_map_effect_script_conector_manager.Update(); game_main.action_manager.Update(); game_main.unit_manager.Update(); game_main.g3d_camera.Update(); if (is_battle_end_check) { CheckGameEnd(); } }
protected override void _NextCheck(int next_x, int next_y, int now_x, int now_y) { // 共通判定と残コストの取得 int leave_move_power = 0; if (_NextCheckBasic(next_x, next_y, now_x, now_y, ref leave_move_power) == false) { return; } // 以下専用判定 var p = next_x + next_y * map_w; var p0 = now_x + now_y * map_w; var gm = GameMain.GetInstance(); var g3d_map = gm.g3d_map; var u = gm.unit_manager.GetUnit(next_x, next_y); var ug = gm.unit_manager.GetUnitGroup(next_x, next_y); // 高低差 var height_difference = Math.Abs( range_calc_get_height(p0 % map_w, p0 / map_w, range_calc_get_height_object) - range_calc_get_height(p % map_w, p / map_w, range_calc_get_height_object)); if (height_difference > jump_power) { return; // 高低差がジャンプ力を超えている } // ユニットグループが違うため通過もできない、かどうか if (!is_range_only) { if (u != null && ug != _unit_group) { return; // 同じグループではないユニットがいる → 通過できない } } // 侵入OK if (u == null) { // 通過・ここに移動 できる _NextCheckIsOkPassBasic(p, p0, true, true, leave_move_power); } else { // ユニットが既に配置されているので通過しかできない _NextCheckIsOkPassBasic(p, p0, false, true, leave_move_power); } }
void _Update_KeyInput() { var game_main = GameMain.GetInstance(); //var user_interface = game_main.user_interface; var game_base = game_main.game_base; //var g3d_camera = game_main.g3d_camera; //var g3d_map = game_main.g3d_map; var unit_manager = game_main.unit_manager; if (game_base.input.mouse_sutatus.left.key_status == Input.MouseButtonKeyStatus.OneCrick) { if (ui_box_restart.IsHit()) { unit_manager.units.Clear(); game_main.NextScene(new SceneSetup("data/script/start.nst")); } } }
public BattleAI(SceneBattle scene_battle, Unit select_unit) { Console.WriteLine("pos " + select_unit.map_x + "," + select_unit.map_y); this.scene_battle = scene_battle; this.select_unit = select_unit; var game_main = GameMain.GetInstance(); var g3d_map = game_main.g3d_map; select_unit_group = game_main.unit_manager.GetUnitGroup(select_unit.map_x, select_unit.map_y); // 範囲系クラス move_area = new RangeAreaMove(g3d_map.map_w, g3d_map.map_h); action_target_area = new RangeAreaActionTarget(g3d_map.map_w, g3d_map.map_h); thread = new Thread(new ThreadStart(Run)); // 可能ならスレッド分けて、画面が停滞しないようにはしたい thread.Start(); }
public override void Draw(bool is_shadowmap) { var game_main = GameMain.GetInstance(); if (is_shadowmap) { game_main.g3d_map.Draw(); game_main.unit_manager.Draw(); game_main.action_manager.Draw(); } else { game_main.g3d_map.Draw(); game_main.unit_manager.Draw(); game_main.action_manager.Draw(); game_main.user_interface.Draw(); } }
public void SetMode(Mode mode, Point mouse_position, SceneBattle.TurnOnwerUnit tou = null) { this.mode = mode; command_ui_position.X = mouse_position.X - 12; command_ui_position.Y = mouse_position.Y - 12; switch (mode) { case Mode.TurnTopCommandShow: command_ui_text_list.Clear(); if (!tou.end_move) { command_ui_text_list.Add(new UserInterface.Command("移動", "移動")); } if (!tou.end_action) { foreach (var a in tou.unit_manager_status.unit.bt.actions) { var ad = ActionDataManager.GetActionData(a.system_name); command_ui_text_list.Add(new UserInterface.Command(ad.view_name, ad.system_name)); } } command_ui_text_list.Add(new UserInterface.Command("ステータス", "ステータス")); command_ui_text_list.Add(new UserInterface.Command("待機", "待機")); { // デバック用 var scene = GameMain.GetInstance().scene as SceneBattle; if (scene != null) { if (GameMain.GetInstance().debug_status.is_battle_ui_debug_mode) { command_ui_text_list.Add(new UserInterface.Command("AI", "AI")); command_ui_text_list.Add(new UserInterface.Command("Stage Clear", "Stage Clear")); command_ui_text_list.Add(new UserInterface.Command("Game Over", "Game Over")); } } } break; case Mode.SubTopCommandShow: command_ui_text_list.Clear(); command_ui_text_list.Add(new UserInterface.Command("ステータス", "ステータス")); break; } }
// 移動エリアを計算する // その、全体の構造を汎用的にしているので、この関数をoverrideする必要はないと思われる public virtual void Check(int map_x, int map_y, int move_power, int jump_power) { this.start_map_x = map_x; this.start_map_y = map_y; this.move_power = move_power; // マスを進める力 this.jump_power = jump_power; // 上下方向への強さ Clear(); // 初期化 // 移動エリア計算用 // リストをキューとして扱い、次に判定すべきマスを入れていく // これにより判定処理を、全体と個別_NextCheckに分けられる // また、判定が距離の近い順と、射程順に処理できる _tmp_next_point_list = new List <int>(); _unit_group = GameMain.GetInstance().unit_manager.GetUnitGroup(map_x, map_y); var p0 = start_map_x + start_map_y * map_w; //squares[p0]._tmp_move_power = move_power + range_calc_get_move_cost(start_map_x, start_map_y, range_calc_get_move_cost_object); // 初期座標へは移動コストが要らないのでその分を補填 squares[p0]._tmp_move_power = move_power; squares[p0].step_count = 0; _tmp_next_point_list.Add(p0); while (_tmp_next_point_list.Count() > 0) { var p = _tmp_next_point_list[0]; try { _tmp_next_point_list.RemoveAt(0); } catch { Console.WriteLine("Err RangeArea Check"); } var x = p % map_w; var y = p / map_w; _NextCheck(x - 1, y, x, y); _NextCheck(x + 1, y, x, y); _NextCheck(x, y - 1, x, y); _NextCheck(x, y + 1, x, y); } }
protected override void _NextCheck(int next_x, int next_y, int now_x, int now_y) { // 共通判定と残コストの取得 int leave_move_power = 0; if (_NextCheckBasic(next_x, next_y, now_x, now_y, ref leave_move_power) == false) { return; } // 以下専用判定 var p = next_x + next_y * map_w; var p0 = now_x + now_y * map_w; var gm = GameMain.GetInstance(); var g3d_map = gm.g3d_map; var u = gm.unit_manager.GetUnit(next_x, next_y); var ug = gm.unit_manager.GetUnitGroup(next_x, next_y); // 高低差 var height_difference = Math.Abs( range_calc_get_height(p0 % map_w, p0 / map_w, range_calc_get_height_object) - range_calc_get_height(p % map_w, p / map_w, range_calc_get_height_object)); if (height_difference > jump_power) { return; // 高低差がジャンプ力を超えている } // 侵入OK squares[p]._tmp_move_power = leave_move_power; squares[p].step_count = squares[p0].step_count + 1; _tmp_next_point_list.Add(p); // 侵入OK if (u == null) { // ユニットがいない(is_passのみ) _NextCheckIsOkPassBasic(p, p0, false, true, leave_move_power); } else { // ユニットが配置されている _NextCheckIsOkPassBasic(p, p0, true, true, leave_move_power); } }
Unit GetUISelectUnit() { int i = 0; foreach (var box in ui_unit_names) { if (box.IsHit()) { var units = GameMain.GetInstance().unit_manager.units; if (i < units.Count) { return(units[i].unit); } else { return(null); } } i++; } return(null); }
// 勝利条件と敗北条件の確認 public void CheckGameEnd() { var game_main = GameMain.GetInstance(); var unit_manager = game_main.unit_manager; // 敵全滅チェック var is_alive = false; foreach (var um in unit_manager.units) { if (um.group.IndexOf("敵") >= 0 && um.unit.bt.is_alive) { is_alive = true; } } if (!is_alive) { // 全滅である game_main.NextScene(new SceneEndBattle("Stage Clear", "")); return; } // 味方全滅チェック is_alive = false; foreach (var um in unit_manager.units) { if (um.group.IndexOf("味方") >= 0 && um.unit.bt.is_alive) { is_alive = true; } } if (!is_alive) { // 全滅である game_main.NextScene(new SceneEndBattle("Game Over", "")); return; } }