Пример #1
0
    /// <summary>
    /// 戦闘開始前の処理メソッド
    /// </summary>
    ///
    //200814 自分ターンに敵を選択した時、敵AIの攻撃時に呼んで、戦闘ウィンドウを初期化する
    public void MapOpenBattleView(PlayerModel playerModel, EnemyModel enemyModel, bool isPlayerAttack)
    {
        //プレイヤーからの攻撃か否かを設定
        this.isPlayerAttack = isPlayerAttack;

        Unit  unit  = playerModel.unit;
        Enemy enemy = enemyModel.enemy;

        //210219 戦闘に地形効果を追加
        //ユニット、敵のセル情報を取得する
        Main_Cell unitCell  = mainMap.Cells.FirstOrDefault(c => c.X == playerModel.x && c.Y == playerModel.z);
        Main_Cell enemyCell = mainMap.Cells.FirstOrDefault(c => c.X == enemyModel.x && c.Y == enemyModel.y);

        //通常は有り得ない
        if (unitCell == null)
        {
            Debug.Log($"ERROR:ユニットの座標のセル情報が有りません X:{playerModel.x},Y:{playerModel.z}");
        }
        if (enemyCell == null)
        {
            Debug.Log($"ERROR:敵の座標のセル情報が有りません X:{enemyModel.x},Y:{enemyModel.y}");
        }

        //戦闘に使用する数値の計算を実施してUIに表示
        var battleParameterDTO = battleCalculator.CalculateBattleParameter(unit, unit.equipWeapon, unitCell, enemy, enemyCell, isPlayerAttack);

        battleView.GetComponent <BattleView>().UpdateText(battleParameterDTO);

        //戦闘UI表示
        battleView.SetActive(true);

        //本クラスに戦闘するプレイヤーと敵を設定
        BattleInit(unit, enemy);

        //プレイヤー攻撃時のみ確認ウィンドウを表示してフォーカス
        if (isPlayerAttack)
        {
            //第二引数は攻撃ならtrue
            battleConfirmWindow.GetComponent <BattleConfirmWindow>().UpdateConfirmtext("戦闘開始して良いですか?", true);
            battleConfirmWindow.SetActive(true);
            EventSystem.current.SetSelectedGameObject(null);
            EventSystem.current.SetSelectedGameObject(battleConfirmWindow.transform.Find("ButtonLayout/StartButton").gameObject);
        }
        else
        {
            //敵から攻撃された時、武器の回数が減らない場合があるバグ対応
            foreach (Item item in unit.carryItem)
            {
                if (item.ItemType == ItemType.WEAPON && item.isEquip)
                {
                    item.weapon = unit.equipWeapon;
                }
            }
            //敵の攻撃時は確認せずに戦闘開始
            battleConfirmWindow.SetActive(false);
            BattleStart();
        }
    }