Exemple #1
0
    /// <summary>
    /// 「もどる」ボタン押されたときの処理
    /// </summary>
    public void PressedBackButton()
    {
        switch (this.currentSituation)
        {
        case E_BattleSituation.PlayerSelectActiveSkill:
        case E_BattleSituation.PlayerSelectActiveItem:
            this.currentSituation = E_BattleSituation.PlayerSelectAction;
            ShowPlayerActionSelect();
            break;

        case E_BattleSituation.PlayerSelectSkillTarget:
            this.waitingEffect = null;
            if (inputTargetWaiting)     //味方1人対象選択中
            {
                this.uiManager.SetActiveAllyTargetButtons(false);
                this.inputTargetWaiting = false;
            }
            this.currentSituation = E_BattleSituation.PlayerSelectActiveSkill;
            ShowActiveSkillSelect(charaList[nextActionIndex]);
            break;

        case E_BattleSituation.PlayerSelectItemTarget:
            this.waitingEffect = null;
            if (inputTargetWaiting)     //味方1人対象選択中
            {
                this.uiManager.SetActiveAllyTargetButtons(false);
                this.inputTargetWaiting = false;
            }
            this.currentSituation = E_BattleSituation.PlayerSelectActiveItem;
            ShowActiveItemSelect();
            break;
        }
    }
Exemple #2
0
    /// <summary>
    /// ActiveSkillの選択画面で、番号入力で対応スキルを発動
    /// </summary>
    private void InputActuateSkill()
    {
        BattleCharacter invoker = charaList[nextActionIndex];

        if (this.waitingEffect != null)
        {
            InvokeEffect(invoker, this.waitingEffect);
            this.waitingEffect = null;
            return;
        }


        for (int i = 0; i < invoker.BattleActiveSkillID.Count; i++)
        {
            if (Input.GetKeyDown(i.ToString()))
            {
                if (this.activeEffectFuncs.GetBattleActiveSkill(invoker.BattleActiveSkillID[i]).NeedBattleSkillPoint > invoker.Bsp)
                {
                    ShowAnnounce("スキルポイントが足りません");
                    this.finishAction = true; return;
                }
                InvokeEffect(invoker, this.activeEffectFuncs.GetBattleActiveSkill(invoker.BattleActiveSkillID[i]));
                if (this.currentSituation == E_BattleSituation.PlayerSelectSkillTarget)
                {
                    this.waitingEffect = this.activeEffectFuncs.GetBattleActiveSkill(invoker.BattleActiveSkillID[i]);
                }
            }
        }
    }
Exemple #3
0
 /// <summary>
 /// targetList全てに対しactiveEffectを発動する(倒れているtargetは除く)
 /// </summary>
 /// <param name="effect">発動するBattleActiveEffect</param>
 /// <param name="invoker">発動者</param>
 /// <param name="targetList">効果対象</param>
 /// <param name="func">呼ぶ関数</param>
 private void EffectToAllTarget(BattleActiveEffect effect, BattleCharacter invoker, List <BattleCharacter> targetList, Action <BattleCharacter, BattleActiveEffect> func)
 {
     foreach (BattleCharacter target in ElementClass.GetListInElement(targetList, effect.TargetElement))
     {
         if (!target.IsAlive)
         {
             continue;                  //とりあえず倒れているキャラに効果は付与しないことにする
         }
         func(target, effect);
     }
 }
Exemple #4
0
 /// <summary>
 /// 固定or割合ダメージ(effect.RateOrValueが1未満でtargetの最大Hpに対する割合ダメージ、1以上で固定ダメージ)
 /// </summary>
 /// <param name="target">攻撃対象</param>
 /// <param name="effect">BattleActiveEffect</param>
 private void FixedDamageAttack(BattleCharacter target, BattleActiveEffect effect) //固定ダメージ(RateOrValueが1以下で最大HPの割合ダメージ)
 {
     if (effect.RateOrValue > 1)
     {
         target.DecreaseHp(effect.RateOrValue);
     }
     else
     {
         target.DecreaseHpByRate(effect.RateOrValue);
     }
 }
Exemple #5
0
 /// <summary>
 /// 固定値or割合Hp回復(effect.RateOrValueが1未満で最大Hpの割合回復、1以上で固定値回復)
 /// </summary>
 /// <param name="target"></param>
 /// <param name="effect"></param>
 private void RecoverHp(BattleCharacter target, BattleActiveEffect effect)
 {
     if (effect.RateOrValue > 1)
     {
         target.RecoverHp(effect.RateOrValue);
     }
     else
     {
         target.RecoverHpByRate(effect.RateOrValue);
     }
 }
Exemple #6
0
    /// <summary>
    /// ActiveItemの選択画面で、番号入力で対応アイテムを発動
    /// </summary>
    private void InputActuateItem()
    {
        BattleCharacter invoker = charaList[nextActionIndex];

        if (this.waitingEffect != null)
        {
            InvokeEffect(invoker, this.waitingEffect);
            this.waitingEffect = null;
            return;
        }
        for (int i = 0; i < this.haveActiveItems.Count; i++)
        {
            if (Input.GetKeyDown(i.ToString()))
            {
                InvokeEffect(invoker, this.haveActiveItems[i]);
                if (this.currentSituation == E_BattleSituation.PlayerSelectItemTarget)
                {
                    this.waitingEffect = this.haveActiveItems[i];
                }
            }
        }
    }
Exemple #7
0
 private void AddBsp(BattleCharacter target, BattleActiveEffect effect)
 {
     target.AddBsp((int)effect.RateOrValue);
 }
Exemple #8
0
 private void SetAttractingAffect(BattleCharacter target, BattleActiveEffect effect)
 {
     target.AddAttractEffectTurn(effect.EffectElement, effect.EffectTurn);
 }
Exemple #9
0
 private void SetRebornEffect(BattleCharacter target, BattleActiveEffect effect)
 {
     target.RebornHpRate = effect.RateOrValue;
 }
Exemple #10
0
 private void SetElementChanged(BattleCharacter target, BattleActiveEffect effect)
 {
     target.SetElementChanged(effect.EffectElement, effect.EffectTurn);
 }
Exemple #11
0
 private void AddNormalAttackNum(BattleCharacter target, BattleActiveEffect effect)
 {
     target.AddNormalAttackNum((int)effect.RateOrValue, effect.EffectTurn);
 }
Exemple #12
0
 /// <summary>
 /// 自身のこのターン受けた総ダメージ量*power(atk * toDamageRate * effectRate)のダメージ
 /// </summary>
 /// <param name="attacker">攻撃者</param>
 /// <param name="target">攻撃対象</param>
 /// <param name="effect">BattleActiveEffect</param>
 private void CounterAttack(BattleCharacter attacker, BattleCharacter target, BattleActiveEffect effect)
 {
     target.DamagedByElementAttack(attacker.HaveDamageThisTurn * attacker.GetToDamageRate(effect.EffectElement) * effect.RateOrValue, effect.EffectElement);
 }
Exemple #13
0
 private void Attack(BattleCharacter attacker, BattleCharacter target, BattleActiveEffect effect)
 {
     target.DamagedByElementAttack(attacker.Atk * attacker.GetToDamageRate(effect.EffectElement) * effect.RateOrValue, effect.EffectElement);
 }
Exemple #14
0
 private void AddNormalAttackToAllTurn(BattleCharacter target, BattleActiveEffect effect)
 {
     target.NormalAttackToAllTurn += effect.EffectTurn;
 }
Exemple #15
0
 private void BuffSpdStatus(BattleCharacter target, BattleActiveEffect effect)
 {
     target.AddSpdRate(effect.RateOrValue, effect.EffectTurn);
 }
Exemple #16
0
 private void AddFromNormalAttackRate(BattleCharacter target, BattleActiveEffect effect)
 {
     target.AddFromNormalAttackRate(effect.RateOrValue, effect.EffectTurn);
 }
Exemple #17
0
 private void BuffFromDamageRate(BattleCharacter target, BattleActiveEffect effect)
 {
     target.AddFromDamageRate(effect.EffectElement, effect.RateOrValue, effect.EffectTurn);
 }
Exemple #18
0
 private void AddSpRegeneration(BattleCharacter target, BattleActiveEffect effect)
 {
     target.AddSpRegeneration((int)effect.RateOrValue, effect.EffectTurn);
 }
Exemple #19
0
 private void SetNoGetDamaged(BattleCharacter target, BattleActiveEffect effect)
 {
     target.AddNoGetDamaged(effect.EffectElement, effect.EffectTurn);
 }
Exemple #20
0
    /// <summary>
    /// ActiveEffectの効果適用
    /// </summary>
    /// <param name="effect">適用するActiveEffect</param>
    /// <param name="invoker">(skill,item)発動者</param>
    /// <param name="target">効果対象</param>
    public void EffectFunc(BattleActiveEffect effect, BattleCharacter invoker, List <BattleCharacter> target)
    {
        Debug.Log(invoker.CharaClass.CharaName + "の" + effect.EffectName);

        switch (effect.EffectType)
        {
        case E_BattleActiveEffectType.攻撃:
            EffectToAllTarget(effect, invoker, target, Attack);
            break;

        case E_BattleActiveEffectType.固定ダメージ:
            EffectToAllTarget(effect, invoker, target, FixedDamageAttack);
            break;

        case E_BattleActiveEffectType.HP回復:
            EffectToAllTarget(effect, invoker, target, RecoverHp);
            break;

        case E_BattleActiveEffectType.ATKバフ:
            EffectToAllTarget(effect, invoker, target, BuffAtkStatus);
            break;

        case E_BattleActiveEffectType.SPDバフ:
            EffectToAllTarget(effect, invoker, target, BuffSpdStatus);
            break;

        case E_BattleActiveEffectType.HPバフ:
            EffectToAllTarget(effect, invoker, target, BuffHpStatus);
            break;

        case E_BattleActiveEffectType.被ダメージ増減バフ:
            EffectToAllTarget(effect, invoker, target, BuffFromDamageRate);
            break;

        case E_BattleActiveEffectType.与ダメージ増減バフ:
            EffectToAllTarget(effect, invoker, target, BuffToDamageRate);
            break;

        case E_BattleActiveEffectType.スキルポイント増減:
            EffectToAllTarget(effect, invoker, target, AddBsp);
            break;

        case E_BattleActiveEffectType.属性変化:
            EffectToAllTarget(effect, invoker, target, SetElementChanged);
            break;

        case E_BattleActiveEffectType.復活付与:
            EffectToAllTarget(effect, invoker, target, SetRebornEffect);
            break;

        case E_BattleActiveEffectType.無敵付与:
            EffectToAllTarget(effect, invoker, target, SetNoGetDamaged);
            break;

        case E_BattleActiveEffectType.攻撃集中:
            EffectToAllTarget(effect, invoker, target, SetAttractingAffect);
            break;

        case E_BattleActiveEffectType.カウンター:
            EffectToAllTarget(effect, invoker, target, CounterAttack);
            break;

        case E_BattleActiveEffectType.通常攻撃全体攻撃化:
            EffectToAllTarget(effect, invoker, target, AddNormalAttackToAllTurn);
            break;

        case E_BattleActiveEffectType.通常攻撃被ダメージ増減:
            EffectToAllTarget(effect, invoker, target, AddFromNormalAttackRate);
            break;

        case E_BattleActiveEffectType.通常攻撃与ダメージ増減:
            EffectToAllTarget(effect, invoker, target, AddToNormalAttackRate);
            break;

        case E_BattleActiveEffectType.通常攻撃回数追加:
            EffectToAllTarget(effect, invoker, target, AddNormalAttackNum);
            break;

        case E_BattleActiveEffectType.攻撃集中被ダメ減:
            EffectToAllTarget(effect, invoker, target, SetAttractingAffect);
            EffectToAllTarget(effect, invoker, target, BuffFromDamageRate);
            break;

        case E_BattleActiveEffectType.HPリジェネ:
            EffectToAllTarget(effect, invoker, target, AddHpRegeneration);
            break;

        case E_BattleActiveEffectType.SPリジェネ:
            EffectToAllTarget(effect, invoker, target, AddSpRegeneration);
            break;


        case E_BattleActiveEffectType.その他:
            effect.OtherFunc(invoker, target);
            break;
        }
    }
Exemple #21
0
    /// <summary>
    /// ActiveEffect(skill or item)の発動、ターン経過
    /// </summary>
    /// <param name="invoker">Effect発動者</param>
    /// <param name="effect">発動するActiveEffect</param>
    private void InvokeEffect(BattleCharacter invoker, BattleActiveEffect effect)
    {
        switch (effect.TargetType)
        {
        case E_TargetType.All:
            this.activeEffectFuncs.EffectFunc(effect, invoker, charaList);
            break;

        case E_TargetType.OneEnemy:
            if (invoker.IsEnemy)
            {
                if (GetAttractingCharacter(effect.EffectElement, this.allyList) == null)
                {
                    this.activeEffectFuncs.EffectFunc(effect, invoker, new List <BattleCharacter>()
                    {
                        ListManager.GetRandomIndex <BattleCharacter>(GetAliveList(this.allyList))
                    });
                }
                else
                {
                    this.activeEffectFuncs.EffectFunc(effect, invoker, new List <BattleCharacter>()
                    {
                        GetAttractingCharacter(effect.EffectElement, this.allyList)
                    });
                }
            }
            else
            {
                if (GetAttractingCharacter(effect.EffectElement, this.enemyList) == null)
                {
                    this.activeEffectFuncs.EffectFunc(effect, invoker, new List <BattleCharacter>()
                    {
                        target
                    });
                }
                else
                {
                    this.activeEffectFuncs.EffectFunc(effect, invoker, new List <BattleCharacter>()
                    {
                        GetAttractingCharacter(effect.EffectElement, this.enemyList)
                    });
                }
            }
            break;

        case E_TargetType.AllAlly:
            if (invoker.IsEnemy)
            {
                this.activeEffectFuncs.EffectFunc(effect, invoker, this.enemyList);
            }
            else
            {
                this.activeEffectFuncs.EffectFunc(effect, invoker, allyList);
            }
            break;

        case E_TargetType.AllEnemy:
            if (invoker.IsEnemy)
            {
                this.activeEffectFuncs.EffectFunc(effect, invoker, this.allyList);
            }
            else
            {
                this.activeEffectFuncs.EffectFunc(effect, invoker, enemyList);
            }
            break;

        case E_TargetType.Self:
            this.activeEffectFuncs.EffectFunc(effect, invoker, new List <BattleCharacter>()
            {
                invoker
            });
            break;

        case E_TargetType.OneAlly:
            if (invoker.IsEnemy)
            {
                this.activeEffectFuncs.EffectFunc(effect, invoker, new List <BattleCharacter>()
                {
                    ListManager.GetRandomIndex <BattleCharacter>(GetAliveList(this.enemyList))
                });
            }
            else
            {
                //プレイヤー入力によるtargetの指定処理
                if (this.target.IsEnemy)
                {
                    this.inputTargetWaiting = true;
                    if (this.currentSituation == E_BattleSituation.PlayerSelectActiveSkill)
                    {
                        this.currentSituation = E_BattleSituation.PlayerSelectSkillTarget;
                    }
                    else if (this.currentSituation == E_BattleSituation.PlayerSelectActiveItem)
                    {
                        this.currentSituation = E_BattleSituation.PlayerSelectItemTarget;
                    }
                    this.uiManager.PromptSelectTargetOneAlly();
                    return;
                }
                this.activeEffectFuncs.EffectFunc(effect, invoker, new List <BattleCharacter>()
                {
                    this.target
                });
            }
            break;
        }
        AdvanceTurn();
    }