Пример #1
0
    // 選択肢から選んだモードを実行
    public void ChooseAttackOptions(BattleState selectOption, GameObject target, Skill skill = null, Item item = null)
    {
        // スキルやターゲットの情報をセット
        currentTarget = target;
        currentSkill  = skill;
        targetCharacterBattleScript = target.GetComponent <CharacterBattleScript>();
        targetCharacterStatus       = targetCharacterBattleScript.GetCharacterStatus();

        // 選択したキャラクターの状態を設定
        battleState = selectOption;

        if (selectOption == BattleState.DirectAttack)
        {
            //animator.SetTrigger("DirectAttack");
        }
        else if (selectOption == BattleState.MagicAttack ||
                 selectOption == BattleState.Healing ||
                 selectOption == BattleState.IncreaseAttackPowerMagic ||
                 selectOption == BattleState.IncreaseDefencePowerMagic ||
                 selectOption == BattleState.NumbnessRecoveryMagic ||
                 selectOption == BattleState.PoisonnouRecoveryMagic
                 )
        {
            //animator.SetTrigger("MagicAttack");
            // 魔法使用者のMPを減らす
            SetMp(GetMp() - ((Magic)skill).GetAmountToUseMagicPoints());
            // 使用者が味方キャラクターであればStatusPanelの更新
            if (GetCharacterStatus() as AllyStatus != null)
            {
                battleStatusScript.UpdateStatus(GetCharacterStatus(), BattleStatusScript.Status.MP, GetMp());
            }
            //Instantiate(((Magic)skill).GetSkillUserEffect(), transform.position, ((Magic)skill).GetSkillUserEffect().transform.rotation);
        }
        else if (selectOption == BattleState.UseHPRecoveryItem ||
                 selectOption == BattleState.UseMPRecoveryItem ||
                 selectOption == BattleState.UseNumbnessRecoveryItem ||
                 selectOption == BattleState.UsePoisonRecoveryItem
                 )
        {
            currentItem = item;
            //animator.SetTrigger("UseItem");
        }
    }
Пример #2
0
    void Update()
    {
        // 既に死んでいたら何もしない
        if (isDead)
        {
            return;
        }

        // 自分のターンでなければ何もしない
        if (battleState == BattleState.Idle)
        {
            return;
        }

        /*
         * // アニメーションが終わっていなければ何もしない
         * if (!isDoneAnimation)
         * {
         *  return;
         * }
         */

        // 選択したアニメーションによって処理を分ける
        if (battleState == BattleState.DirectAttack)
        {
            //ShowEffectOnTheTarget();
            DirectAttack();
            // 自分のターンが来たので上がったパラメータのチェック
            CheckIncreaseAttackPower();
            CheckIncreaseStrikingStrength();
        }
        else if (battleState == BattleState.MagicAttack)
        {
            //ShowEffectOnTheTarget();
            MagicAttack();
            // 自分のターンが来たので上がったパラメータのチェック
            CheckIncreaseAttackPower();
            CheckIncreaseStrikingStrength();
        }
        else if (battleState == BattleState.Healing ||
                 battleState == BattleState.NumbnessRecoveryMagic ||
                 battleState == BattleState.PoisonnouRecoveryMagic
                 )
        {
            //ShowEffectOnTheTarget();
            UseMagic();
            // 自分のターンが来たので上がったパラメータのチェック
            CheckIncreaseAttackPower();
            CheckIncreaseStrikingStrength();
        }
        else if (battleState == BattleState.IncreaseAttackPowerMagic)
        {
            //ShowEffectOnTheTarget();
            UseMagic();
            // 自身の攻撃力をアップした場合はターン数をカウントしない
            if (currentTarget == this.gameObject)
            {
                CheckIncreaseStrikingStrength();
            }
            else
            {
                CheckIncreaseAttackPower();
                CheckIncreaseStrikingStrength();
            }
        }
        else if (battleState == BattleState.IncreaseDefencePowerMagic)
        {
            //ShowEffectOnTheTarget();
            UseMagic();
            // 自身の防御力をアップした場合はターン数をカウントしない
            if (currentTarget == this.gameObject)
            {
                CheckIncreaseAttackPower();
            }
            else
            {
                CheckIncreaseAttackPower();
                CheckIncreaseStrikingStrength();
            }
        }
        else if (battleState == BattleState.UseHPRecoveryItem ||
                 battleState == BattleState.UseMPRecoveryItem ||
                 battleState == BattleState.UseNumbnessRecoveryItem ||
                 battleState == BattleState.UsePoisonRecoveryItem
                 )
        {
            UseItem();
            // 自分のターンが来たので上がったパラメータのチェック
            CheckIncreaseAttackPower();
            CheckIncreaseStrikingStrength();
        }
        // ターゲットのリセット
        currentTarget = null;
        currentSkill  = null;
        currentItem   = null;
        targetCharacterBattleScript = null;
        targetCharacterStatus       = null;
        battleState = BattleState.Idle;
        // 自身の選択が終了したら次のキャラクターにする
        battleManager.ChangeNextChara();
        isDoneAnimation = false;
    }
Пример #3
0
    // 攻撃処理
    public void AttackProcess(GameObject character, Skill nowSkill, GameObject targetChara, Item item = null)
    {
        CharacterBattleScript characterBattleScript = character.GetComponent <CharacterBattleScript>();
        CharacterStatus       characterStatus       = characterBattleScript.GetCharacterStatus();

        if (characterStatus.GetSkillList().Count <= 0)
        {
            return;
        }
        // 敵がガード状態であればガードを解く

        /*
         * if (character.GetComponent<Animator>().GetBool("Guard"))
         * {
         *  character.GetComponent<CharacterBattleScript>().UnlockGuard();
         * }
         */
        character.GetComponent <CharacterBattleScript>().UnlockGuard();

        //味方で逃走失敗なら何もしない
        if (isFailGetAway && characterStatus as AllyStatus != null)
        {
            ChangeNextChara();
            return;
        }

        ShowMessage(characterStatus.GetCharacterName() + "の攻撃");
        if (nowSkill.GetSkillType() == Skill.Type.DirectAttack)
        {
            // 攻撃相手のCharacterBattleScript
            characterBattleScript.ChooseAttackOptions(CharacterBattleScript.BattleState.DirectAttack, targetChara, nowSkill);
            Debug.Log(character.name + "は" + nowSkill.GetKanjiName() + "を行った");
            ShowMessage(character.name + "は" + nowSkill.GetKanjiName() + "を行った");
        }
        else if (nowSkill.GetSkillType() == Skill.Type.MagicAttack)
        {
            if (characterBattleScript.GetMp() >= ((Magic)nowSkill).GetAmountToUseMagicPoints())
            {
                // 攻撃相手のCharacterBattleScript
                characterBattleScript.ChooseAttackOptions(CharacterBattleScript.BattleState.MagicAttack, targetChara, nowSkill);
                Debug.Log(character.name + "は" + nowSkill.GetKanjiName() + "を行った");
                ShowMessage(character.name + "は" + nowSkill.GetKanjiName() + "を行った");
            }
            else
            {
                Debug.Log("MPが足りない!");
                ShowMessage("MPが足りない!");
                // MPが足りない場合は直接攻撃を行う
                characterBattleScript.ChooseAttackOptions(CharacterBattleScript.BattleState.DirectAttack, targetChara, characterStatus.GetSkillList().Find(skill => skill.GetSkillType() == Skill.Type.DirectAttack));
                Debug.Log(character.name + "は攻撃を行った");
                ShowMessage(character.name + "は攻撃を行った");
            }
        }
        else if (nowSkill.GetSkillType() == Skill.Type.RecoveryMagic)
        {
            if (characterBattleScript.GetMp() >= ((Magic)nowSkill).GetAmountToUseMagicPoints())
            {
                // 回復相手のCharacterBattleScript
                characterBattleScript.ChooseAttackOptions(CharacterBattleScript.BattleState.Healing, targetChara, nowSkill);
                Debug.Log(character.name + "は" + nowSkill.GetKanjiName() + "を行った");
                ShowMessage(character.name + "は" + nowSkill.GetKanjiName() + "を行った");
            }
            else
            {
                Debug.Log("MPが足りない!");
                ShowMessage("MPが足りない!");
                // MPが足りない場合は直接攻撃を行う
                characterBattleScript.ChooseAttackOptions(CharacterBattleScript.BattleState.DirectAttack, targetChara, characterStatus.GetSkillList().Find(skill => skill.GetSkillType() == Skill.Type.DirectAttack));
                Debug.Log(character.name + "は攻撃を行った");
                ShowMessage(character.name + "は攻撃を行った");
            }
        }
        else if (nowSkill.GetSkillType() == Skill.Type.Item)
        {
            //characterBattleScript.ChooseAttackOptions(CharacterBattleScript.BattleState.UseHPRecoveryItem, targetChara, nowSkill, item);
            UseItem(character, targetChara, item);
        }
        else if (nowSkill.GetSkillType() == Skill.Type.Guard)
        {
            characterBattleScript.Guard();
            // Guardアニメはboolなのでアニメーション遷移させたらすぐに次のキャラクターに移行させる
            ChangeNextChara();
            Debug.Log(character.name + "は" + nowSkill.GetKanjiName() + "を行った");
            ShowMessage(character.name + "は" + nowSkill.GetKanjiName() + "を行った");
        }
    }