/// <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; } }
/// <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]); } } } }
/// <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); } }
/// <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); } }
/// <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); } }
/// <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]; } } } }
private void AddBsp(BattleCharacter target, BattleActiveEffect effect) { target.AddBsp((int)effect.RateOrValue); }
private void SetAttractingAffect(BattleCharacter target, BattleActiveEffect effect) { target.AddAttractEffectTurn(effect.EffectElement, effect.EffectTurn); }
private void SetRebornEffect(BattleCharacter target, BattleActiveEffect effect) { target.RebornHpRate = effect.RateOrValue; }
private void SetElementChanged(BattleCharacter target, BattleActiveEffect effect) { target.SetElementChanged(effect.EffectElement, effect.EffectTurn); }
private void AddNormalAttackNum(BattleCharacter target, BattleActiveEffect effect) { target.AddNormalAttackNum((int)effect.RateOrValue, effect.EffectTurn); }
/// <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); }
private void Attack(BattleCharacter attacker, BattleCharacter target, BattleActiveEffect effect) { target.DamagedByElementAttack(attacker.Atk * attacker.GetToDamageRate(effect.EffectElement) * effect.RateOrValue, effect.EffectElement); }
private void AddNormalAttackToAllTurn(BattleCharacter target, BattleActiveEffect effect) { target.NormalAttackToAllTurn += effect.EffectTurn; }
private void BuffSpdStatus(BattleCharacter target, BattleActiveEffect effect) { target.AddSpdRate(effect.RateOrValue, effect.EffectTurn); }
private void AddFromNormalAttackRate(BattleCharacter target, BattleActiveEffect effect) { target.AddFromNormalAttackRate(effect.RateOrValue, effect.EffectTurn); }
private void BuffFromDamageRate(BattleCharacter target, BattleActiveEffect effect) { target.AddFromDamageRate(effect.EffectElement, effect.RateOrValue, effect.EffectTurn); }
private void AddSpRegeneration(BattleCharacter target, BattleActiveEffect effect) { target.AddSpRegeneration((int)effect.RateOrValue, effect.EffectTurn); }
private void SetNoGetDamaged(BattleCharacter target, BattleActiveEffect effect) { target.AddNoGetDamaged(effect.EffectElement, effect.EffectTurn); }
/// <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; } }
/// <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(); }