// 次の手番ユニットを決める public void NextUnitTurn() { // 旧手番ユニットのWTを調整しておく if (turn_owner_unit.unit_manager_status != null && turn_owner_unit.unit_manager_status.unit.bt.is_alive) { turn_owner_unit.unit_manager_status.unit.ResetWT(); } var game_main = GameMain.GetInstance(); var unit_manager = game_main.unit_manager; // 戦闘不能を予定から確定にしておく(念のため) // 他の、行動効果の確定も個々でやったほうが良さそう foreach (var u in unit_manager.units) { if (u.unit.bt.is_reserve_dead) { u.unit.SetAlive(false); } } if (unit_manager.active_units.Count() == 0) { while (unit_manager.active_units.Count() == 0) { unit_manager.StepBattle(); } } if (unit_manager.active_units.Count() > 0) { turn_owner_unit.unit_manager_status = unit_manager.active_units[0]; unit_manager.active_units.RemoveAt(0); turn_owner_unit.end_action = false; turn_owner_unit.end_sub_action = false; turn_owner_unit.end_move = false; //unit_manager.active_units.RemoveAt(0); game_main.g3d_map.SetTurnOwnerCursor(turn_owner_unit.unit_manager_status.unit); } else { // Err? turn_owner_unit.unit_manager_status = null; turn_owner_unit.end_action = false; turn_owner_unit.end_sub_action = false; turn_owner_unit.end_move = false; } if (!turn_owner_unit.unit_manager_status.unit.bt.is_alive) { // 生存してない NextUnitTurn(); return; } // AIによる行動 if (game_main.debug_status.is_auto_battle) { battle_ai = new BattleAI(this, turn_owner_unit.unit_manager_status.unit); } else if (!game_main.debug_status.is_battle_ui_debug_mode) { if (turn_owner_unit.unit_manager_status.group != "味方") { battle_ai = new BattleAI(this, turn_owner_unit.unit_manager_status.unit); } } }
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; user_interface.Update(game_base.input.mouse_sutatus.position); if (game_main.action_manager.IsControlFreese() || game_main.battle_map_effect_script_conector_manager.IsControlFreese()) { g3d_map.is_draw_cursor_turn_owner = false; return; } else { g3d_map.is_draw_cursor_turn_owner = true; } // if (DX.CheckHitKey(DX.KEY_INPUT_Q) == DX.TRUE) { g3d_camera.AddRot(0.03f); } if (DX.CheckHitKey(DX.KEY_INPUT_E) == DX.TRUE) { g3d_camera.AddRot(-0.03f); } if (DX.CheckHitKey(DX.KEY_INPUT_A) == DX.TRUE) { g3d_camera.MoveYRot(1.00f, 90); } if (DX.CheckHitKey(DX.KEY_INPUT_D) == DX.TRUE) { g3d_camera.MoveYRot(1.00f, -90); } if (DX.CheckHitKey(DX.KEY_INPUT_S) == DX.TRUE) { g3d_camera.MoveFront(-1.0f); } if (DX.CheckHitKey(DX.KEY_INPUT_W) == DX.TRUE) { g3d_camera.MoveFront(1.0f); } if (DX.CheckHitKey(DX.KEY_INPUT_F) == DX.TRUE) { //g3d_camera.MoveFront(1.0f); g3d_map.SetMoveRouteEffect(g3d_map.map_cursor_x, g3d_map.map_cursor_y); } if (game_base.input.GetKeyInputStatus((int)GameMain.KeyCode.DebugView) == Input.KeyInputStatus.Up) { game_main.debug_is_view = !game_main.debug_is_view; } //if (user_interface.mode == UserInterface.Mode.NonePlayerTurn) if (battle_ai != null) { if (battle_ai.GetIsEnd()) { battle_ai = null; user_interface.SetMode(UserInterface.Mode.PlayerTurnFree, game_base.input.mouse_sutatus.position); NextUnitTurn(); } } else if (game_base.input.mouse_sutatus.left.key_status == Input.MouseButtonKeyStatus.OneCrick) { if (user_interface.IsHitUI()) // UIへの入力 { var command = user_interface.GetHitUICommand(); var action_data = ActionDataManager.GetActionData(command.system_name); switch (user_interface.mode) { case UserInterface.Mode.TurnTopCommandShow: select_command = command; switch (command.system_name) { default: if (action_data != null) { user_interface.SetMode(UserInterface.Mode.AtackTargetSelect, game_base.input.mouse_sutatus.position); user_interface.mode_param1 = action_data.range_type; g3d_map.ClearRangeAreaEffect(); g3d_map.SetActionTargetAreaEffect(select_unit.map_x, select_unit.map_y, action_data.range_min, action_data.range_max, 1); } else { user_interface.SetMode(UserInterface.Mode.PlayerTurnFree, game_base.input.mouse_sutatus.position); g3d_map.ClearRangeAreaEffect(); } break; case "移動": user_interface.SetMode(UserInterface.Mode.MovePointSelect, game_base.input.mouse_sutatus.position); break; case "待機": _Update_KeyInput_TurnOnwerEnd(); user_interface.SetMode(UserInterface.Mode.PlayerTurnFree, game_base.input.mouse_sutatus.position); g3d_map.ClearRangeAreaEffect(); break; case "ステータス": user_interface.SetMode(UserInterface.Mode.UnitStatusView, game_base.input.mouse_sutatus.position); user_interface.SetStatusUnit(select_unit); g3d_map.ClearRangeAreaEffect(); break; case "AI": user_interface.SetMode(UserInterface.Mode.NonePlayerTurn, game_base.input.mouse_sutatus.position); g3d_map.ClearRangeAreaEffect(); battle_ai = new BattleAI(this, select_unit); break; case "Game Over": user_interface.SetMode(UserInterface.Mode.PlayerTurnFree, game_base.input.mouse_sutatus.position); game_main.NextScene(new SceneEndBattle("Game Over", "")); break; case "Stage Clear": user_interface.SetMode(UserInterface.Mode.PlayerTurnFree, game_base.input.mouse_sutatus.position); game_main.NextScene(new SceneEndBattle("Stage Clear", "")); break; } break; case UserInterface.Mode.SubTopCommandShow: select_command = command; switch (command.system_name) { default: if (action_data != null) { user_interface.SetMode(UserInterface.Mode.AtackTargetSelect, game_base.input.mouse_sutatus.position); user_interface.mode_param1 = action_data.range_type; g3d_map.ClearRangeAreaEffect(); g3d_map.SetActionTargetAreaEffect(select_unit.map_x, select_unit.map_y, action_data.range_min, action_data.range_max, 1); } else { user_interface.SetMode(UserInterface.Mode.PlayerTurnFree, game_base.input.mouse_sutatus.position); g3d_map.ClearRangeAreaEffect(); } break; case "ステータス": user_interface.SetMode(UserInterface.Mode.UnitStatusView, game_base.input.mouse_sutatus.position); user_interface.SetStatusUnit(select_unit); g3d_map.ClearRangeAreaEffect(); break; //case "AI": // user_interface.SetMode(UserInterface.Mode.NonePlayerTurn, game_base.input.mouse_sutatus.position); // g3d_map.ClearRangeAreaEffect(); // battle_ai = new BattleAI(this, select_unit); // break; } break; } } else if (g3d_map.map_cursor_x >= 0 && g3d_map.map_cursor_y >= 0) // 3Dマップへの入力 { switch (user_interface.mode) { case UserInterface.Mode.MovePointSelect: // 移動選択 { var is_inside = g3d_map.move_area.IsInside(g3d_map.map_cursor_x, g3d_map.map_cursor_y); if (is_inside) { // 移動範囲内 select_unit.Move(g3d_map.map_cursor_x, g3d_map.map_cursor_y, true); user_interface.SetMode(UserInterface.Mode.PlayerTurnFree, game_base.input.mouse_sutatus.position); if (!game_main.debug_status.is_battle_ui_debug_mode) { turn_owner_unit.end_move = true; } } else { // 移動範囲外 user_interface.SetMode(UserInterface.Mode.PlayerTurnFree, game_base.input.mouse_sutatus.position); } g3d_map.ClearRangeAreaEffect(); } break; case UserInterface.Mode.AtackTargetSelect: // 攻撃対象選択 { DoAction(select_command.system_name, user_interface.mode_param1, select_unit, g3d_map.map_cursor_x, g3d_map.map_cursor_y, true); } break; case UserInterface.Mode.UnitStatusView: user_interface.SetMode(UserInterface.Mode.PlayerTurnFree, game_base.input.mouse_sutatus.position); break; default: { var u = unit_manager.GetUnit(g3d_map.map_cursor_x, g3d_map.map_cursor_y); if (game_main.debug_status.is_battle_ui_debug_mode && (u != null)) { turn_owner_unit.unit_manager_status = GetUnitManagerStatus(u); g3d_map.SetMoveAreaEffect(g3d_map.map_cursor_x, g3d_map.map_cursor_y, u.bt.status["MOVE"].now, u.bt.status["JUMP"].now, ""); user_interface.SetMode(UserInterface.Mode.TurnTopCommandShow, game_base.input.mouse_sutatus.position, turn_owner_unit); select_unit = u; } else if ((u != null) && (u == turn_owner_unit.unit_manager_status.unit)) { //if (select_unit == u) //{ // g3d_map.ClearRangeAreaEffect(); // user_interface.SetMode(UserInterface.Mode.PlayerTurnFree, game_base.input.mouse_sutatus.position); // select_unit = null; //} //else //{ g3d_map.SetMoveAreaEffect(g3d_map.map_cursor_x, g3d_map.map_cursor_y, u.bt.status["MOVE"].now, u.bt.status["JUMP"].now, ""); user_interface.SetMode(UserInterface.Mode.TurnTopCommandShow, game_base.input.mouse_sutatus.position, turn_owner_unit); select_unit = u; //} } else if (u != null) { g3d_map.SetMoveAreaEffect(g3d_map.map_cursor_x, g3d_map.map_cursor_y, u.bt.status["MOVE"].now, u.bt.status["JUMP"].now, ""); //if(select_unit==u) // 2度クリックしたときはコマンド表示を消す //{ // g3d_map.ClearRangeAreaEffect(); // user_interface.SetMode(UserInterface.Mode.PlayerTurnFree, game_base.input.mouse_sutatus.position); // select_unit = null; //} //else //{ user_interface.SetMode(UserInterface.Mode.SubTopCommandShow, game_base.input.mouse_sutatus.position, null); select_unit = u; //} } else { g3d_map.ClearRangeAreaEffect(); user_interface.SetMode(UserInterface.Mode.PlayerTurnFree, game_base.input.mouse_sutatus.position); select_unit = null; } } break; } } } else { switch (user_interface.mode) { case UserInterface.Mode.UnitStatusView: //if (!user_interface.IsHitUI()) //{ // user_interface.SetMode(UserInterface.Mode.PlayerTurnFree, game_base.input.mouse_sutatus.position); //} break; default: if (!user_interface.IsHitUI()) { var u = unit_manager.GetUnit(g3d_map.map_cursor_x, g3d_map.map_cursor_y); user_interface.SetStatusUnit(u); } else { user_interface.SetStatusUnit(select_unit); } break; } } }