Beispiel #1
0
        // 次の手番ユニットを決める
        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);
                }
            }
        }
Beispiel #2
0
        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;
                }
            }
        }