/// <summary> /// BattleManagerからBattleCharacterをセット /// </summary> /* * public void SetCharacter() * { * DungeonManager dm = GetComponent<DungeonManager>(); * List<PlayerCharacter> playerList = dm.PlayerList; * List<EnemyCharacter> enemyList = dm.EnemyList; * foreach(PlayerCharacter player in playerList) * { * this.allyList.Add(player.GetComponent<BattleCharacter>()); * this.charaList.Add(player.GetComponent<BattleCharacter>()); * } * foreach(EnemyCharacter enemy in enemyList) * { * this.enemyList.Add(enemy.GetComponent<BattleCharacter>()); * this.charaList.Add(enemy.GetComponent<BattleCharacter>()); * } * }*/ /// <summary> /// 攻撃を集中しているキャラクターをリストの先頭から探索 /// </summary> /// <param name="attractElement">集中しているか調べる属性</param> /// <param name="charaList">探索するキャラリスト</param> /// <returns>最初に見つかった集中させているキャラ(いなければnull)</returns> public BattleCharacter GetAttractingCharacter(E_Element attractElement, List <BattleCharacter> charaList) //charaListの先頭から検索していくため、sortされないlistを渡す必要がある { foreach (BattleCharacter bc in charaList) { if (bc.IsAlive && bc.IsAttracting(attractElement)) { return(bc); } } return(null); }
/// <summary> /// 属性ごとにターンを保持している辞書型変数へ、ターン増加(ActiveEffect) /// </summary> /// <param name="dic">属性ごとにターン保持している辞書型変数</param> /// <param name="effectElement">効果対象属性</param> /// <param name="addTurnValue">増加ターン数</param> public static void AddTurn(Dictionary <E_Element, int> dic, E_Element effectElement, int addTurnValue) { if (ElementClass.IsFire(effectElement)) { dic[E_Element.Fire] += addTurnValue; } if (ElementClass.IsAqua(effectElement)) { dic[E_Element.Aqua] += addTurnValue; } if (ElementClass.IsTree(effectElement)) { dic[E_Element.Tree] += addTurnValue; } }
/// <summary> /// 属性ごとにフラグを保持している辞書型変数へ、フラグ(true)追加 /// </summary> /// <param name="dic">属性ごとにフラグ保持している辞書型変数</param> /// <param name="effectElement">効果対象属性</param> public static void SetTrueFlag(Dictionary <E_Element, bool> dic, E_Element effectElement) { if (ElementClass.IsFire(effectElement)) { dic[E_Element.Fire] = true; } if (ElementClass.IsAqua(effectElement)) { dic[E_Element.Aqua] = true; } if (ElementClass.IsTree(effectElement)) { dic[E_Element.Tree] = true; } }
/// <summary> /// 属性ごとに倍率を保持している辞書型変数へ、倍率追加 /// </summary> /// <param name="dic">属性ごとに倍率保持している辞書型変数</param> /// <param name="effectElement">効果対象属性</param> /// <param name="addRateValue">追加倍率</param> public static void AddRate(Dictionary <E_Element, double> dic, E_Element effectElement, double addRateValue) { if (ElementClass.IsFire(effectElement)) { dic[E_Element.Fire] *= addRateValue; } if (ElementClass.IsAqua(effectElement)) { dic[E_Element.Aqua] *= addRateValue; } if (ElementClass.IsTree(effectElement)) { dic[E_Element.Tree] *= addRateValue; } }
/// <summary> /// atkElement属性からpowerのダメージ(与ダメージ計算済) /// </summary> /// <param name="power">与ダメージの最終的な威力(atk * ToNormalAttackDamageRate)</param> /// <param name="atkElement">通常攻撃の属性(攻撃者の属性)</param> public void DamagedByNormalAttack(double power, E_Element atkElement) // power = atk * normalAttackRate * elementRate { if (IsNoDamaged(atkElement)) { Debug.Log(CharaClass.CharaName + "に" + ElementClass.GetStringElement(atkElement) + "属性の攻撃が効かない"); return; } else { if (IsDefending) { power *= 0.5 * PassiveFromDamageRateInDefending; } DecreaseHp(power * this.GetFromDamageRate(atkElement) * ElementClass.GetElementCompatibilityRate(atkElement, this.Element) * FromNormalAttackRate); // 威力*属性被ダメ減*属性相性*通常被ダメ } }
/// <summary> /// 辞書型でflag格納している変数を使ってsearchElementのflagを返す /// </summary> /// <param name="dic">属性ごとのflagが格納された検索元</param> /// <param name="searchElement">検索する属性</param> /// <returns></returns> public static bool GetFlagByElement(Dictionary <E_Element, bool> dic, E_Element searchElement) { if (IsFire(searchElement) && dic[E_Element.Fire] == true) { return(true); } if (IsAqua(searchElement) && dic[E_Element.Aqua] == true) { return(true); } if (IsTree(searchElement) && dic[E_Element.Tree] == true) { return(true); } return(false); }
/// <summary> /// 辞書型(属性ごとの倍率管理)の検索属性の倍率を返す /// </summary> /// <param name="dic">検索する辞書型パラメータ</param> /// <param name="searchElement">検索属性</param> /// <returns>その属性の倍率</returns> public static double GetRate(Dictionary <E_Element, double> dic, E_Element searchElement) { double rate = 1; if (IsFire(searchElement)) { rate *= dic[E_Element.Fire]; } if (IsAqua(searchElement)) { rate *= dic[E_Element.Aqua]; } if (IsTree(searchElement)) { rate *= dic[E_Element.Tree]; } return(rate); }
/// <summary> /// 辞書型(属性ごとターン管理)の検索属性のターン数を返す /// </summary> /// <param name="dic">検索する辞書型パラメータ</param> /// <param name="searchElement">検索属性</param> /// <returns>その属性のターン数</returns> public static int GetTurn(Dictionary <E_Element, int> dic, E_Element searchElement) { int turn = 0; if (IsFire(searchElement)) { turn += dic[E_Element.Fire]; } if (IsAqua(searchElement)) { turn += dic[E_Element.Aqua]; } if (IsTree(searchElement)) { turn += dic[E_Element.Tree]; } return(turn); }
/// <summary> /// 列挙型に対する各属性の文字列を返す /// </summary> /// <param name="element">検索する属性</param> /// <returns>属性の文字列</returns> public static string GetStringElement(E_Element element) { switch (element) { case E_Element.Fire: return("火"); case E_Element.Aqua: return("水"); case E_Element.Tree: return("木"); case E_Element.FireAqua: return("火・水"); case E_Element.AquaTree: return("水・木"); case E_Element.TreeFire: return("木・火"); case E_Element.FireAquaTree: return("全"); case E_Element _: return("エラー"); } }
/// <summary> /// 属性相性の倍率を返す(攻撃火、防御火・木ならば、倍率1.5倍) /// </summary> /// <param name="attackElement">攻撃属性</param> /// <param name="targetElement">防御属性</param> /// <returns>属性相性の倍率</returns> public static double GetElementCompatibilityRate(E_Element attackElement, E_Element targetElement) { double rate = 1.0; if (ElementClass.IsFire(attackElement)) { if (ElementClass.IsAqua(targetElement)) { rate /= 2; } if (ElementClass.IsTree(targetElement)) { rate *= 2; } } if (ElementClass.IsAqua(attackElement)) { if (ElementClass.IsFire(targetElement)) { rate *= 2; } if (ElementClass.IsTree(targetElement)) { rate /= 2; } } if (ElementClass.IsTree(attackElement)) { if (ElementClass.IsFire(targetElement)) { rate /= 2; } if (ElementClass.IsAqua(targetElement)) { rate *= 2; } } return(rate); }
/// <summary> /// attackElementの属性を自身に集中しているかどうか /// </summary> /// <param name="attackElement">検索する属性</param> /// <returns>自身に集中しているか</returns> public bool IsAttracting(E_Element attackElement) { return((IsDefending && ElementClass.GetFlagByElement(PassiveAttractInDefending, attackElement)) || (ElementClass.GetTurn(this.attractingEffectTurn, attackElement) > 0)); }
/// <summary> /// damageElementの属性を無効にしているかどうか /// </summary> /// <param name="damageElement">検索する属性</param> /// <returns>無効にしているかどうか</returns> public bool IsNoDamaged(E_Element damageElement) { return(ElementClass.GetTurn(this.noGetDamagedTurn, damageElement) > 0); }
public BuffEffect(E_Element element, double rate, int effectTurn) { this.Element = element; this.Rate = rate; this.EffectTurn = effectTurn; }
/// <summary> /// Activeな属性変化(すでにある場合は前回の効果は消える) /// </summary> /// <param name="element">変化後の属性</param> /// <param name="effectTurn">効果ターン</param> public void SetElementChanged(E_Element element, int effectTurn) { this.beforeSetBuffEffect.Add(new BuffEffectWithType(E_BattleActiveEffectType.属性変化, new BuffEffect(element, effectTurn))); }
/// <summary> /// Activeな攻撃集中効果付与 /// </summary> /// <param name="element">集中する属性</param> /// <param name="effectTurn">効果ターン</param> public void AddAttractEffectTurn(E_Element element, int effectTurn) { this.beforeSetBuffEffect.Add(new BuffEffectWithType(E_BattleActiveEffectType.攻撃集中, new BuffEffect(element, effectTurn))); }
/// <summary> /// Activeな攻撃無効バフ付与 /// </summary> /// <param name="element">どの属性からの攻撃を無効とするか</param> /// <param name="effectTurn">効果ターン</param> public void AddNoGetDamaged(E_Element element, int effectTurn) { this.beforeSetBuffEffect.Add(new BuffEffectWithType(E_BattleActiveEffectType.無敵付与, new BuffEffect(element, effectTurn))); }
/// <summary> /// Activeな被ダメージバフ付与 /// </summary> /// <param name="element">どの属性に対する被ダメージバフか</param> /// <param name="rate">倍率</param> /// <param name="effectTurn">効果ターン</param> public void AddFromDamageRate(E_Element element, double rate, int effectTurn) { this.beforeSetBuffEffect.Add(new BuffEffectWithType(E_BattleActiveEffectType.被ダメージ増減バフ, new BuffEffect(element, rate, effectTurn))); }
public BuffEffect(E_Element element, int effectTurn) { this.Element = element; this.Rate = 0; this.EffectTurn = effectTurn; }
/// <summary> /// PassiveEffect用の条件用保持パラメータ(Conditon)を利用した属性サーチ /// </summary> /// <param name="baseList">検索するキャラのリスト</param> /// <param name="searchElement">検索する属性</param> /// <returns>検索属性をもつキャラのリスト</returns> public static List <BattleCharacter> GetListInElementByCondition(List <BattleCharacter> baseList, E_Element searchElement) { List <BattleCharacter> list = new List <BattleCharacter>(); foreach (BattleCharacter bc in baseList) { if (ElementClass.IsFire(searchElement) && ElementClass.IsFire(bc.Condition.Element)) { list.Add(bc); } else if (ElementClass.IsAqua(searchElement) && ElementClass.IsAqua(bc.Condition.Element)) { list.Add(bc); } else if (ElementClass.IsTree(searchElement) && ElementClass.IsTree(bc.Condition.Element)) { list.Add(bc); } } return(list); }
public void SetParameter(double maxHp, double hp, double spd, double atk, E_Element element, int skillPoint) { this.MaxHp = maxHp; this.Hp = hp; this.Spd = spd; this.Atk = atk; this.Element = element; this.Sp = skillPoint; }
/// <summary> /// 全て考慮したToDamageRateの値を返す(複属性対応) /// </summary> /// <param name="attackElement">攻撃属性</param> /// <returns>倍率</returns> public double GetToDamageRate(E_Element attackElement) { return(ElementClass.GetRate(ToDamageRate, attackElement)); }
public static bool IsTree(E_Element element) { return(element == E_Element.Tree || element == E_Element.AquaTree || element == E_Element.TreeFire || element == E_Element.FireAquaTree); }
/// <summary> /// 全て考慮したFromDamageRateの値を返す(複属性対応) /// </summary> /// <param name="damageElement">被ダメ属性</param> /// <returns>倍率</returns> public double GetFromDamageRate(E_Element damageElement) { return(ElementClass.GetRate(FromDamageRate, damageElement)); }
public BattleCharacterCondition(double maxHp, double hp, double spd, double atk, E_Element element, int skillPoint) { this.MaxHp = maxHp; this.Hp = hp; this.Spd = spd; this.Atk = atk; this.Element = element; this.Sp = skillPoint; }