Exemplo n.º 1
0
        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();
            }
        }
Exemplo n.º 2
0
        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;
                }
            }
        }
Exemplo n.º 3
0
        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;
            }
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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();
                }
            }
        }
Exemplo n.º 6
0
        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++;
        }
Exemplo n.º 7
0
        // 行動対象がいるかどうかと有効度の判定
        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);
        }
Exemplo n.º 8
0
        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;
        }
Exemplo n.º 9
0
        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");
        }
Exemplo n.º 10
0
        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;
            }
        }
Exemplo n.º 11
0
        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);
        }
Exemplo n.º 12
0
        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();
        }
Exemplo n.º 13
0
        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");
        }
Exemplo n.º 14
0
        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();
        }
Exemplo n.º 15
0
        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();
        }
Exemplo n.º 16
0
        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);
        }
Exemplo n.º 17
0
        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);
            }
        }
Exemplo n.º 18
0
        // 敵までの距離を計る
        // 移動力を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);
        }
Exemplo n.º 19
0
        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;
            }
        }
Exemplo n.º 20
0
        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);
            }
        }
Exemplo n.º 21
0
        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();
            }
        }
Exemplo n.º 22
0
        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);
            }
        }
Exemplo n.º 23
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;

            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"));
                }
            }
        }
Exemplo n.º 24
0
        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();
        }
Exemplo n.º 25
0
        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();
            }
        }
Exemplo n.º 26
0
        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;
            }
        }
Exemplo n.º 27
0
        // 移動エリアを計算する
        // その、全体の構造を汎用的にしているので、この関数を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);
            }
        }
Exemplo n.º 28
0
        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);
            }
        }
Exemplo n.º 29
0
        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);
        }
Exemplo n.º 30
0
        // 勝利条件と敗北条件の確認
        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;
            }
        }