/// 攻撃された public void Attacked(BattleRouletteSlotID slotID, BattlePlayerData playerData) { switch (slotID) { case BattleRouletteSlotID.None: currentDamage = 0; currentDamageText = "ミス!ダメージを与えられない!"; playerData.IsCharged = false; break; case BattleRouletteSlotID.Charge: currentDamage = 0; currentDamageText = "力をためた!!"; playerData.IsCharged = true; break; default: CalcDamage(slotID, playerData); currentDamageText = AttackedName(slotID) + "\n" + name + "に" + (currentDamage) + "のダメージを与えた!"; currentHp = Mathf.Max(currentHp - currentDamage, 0); isDead = (currentHp <= 0); playerData.IsCharged = false; break; } Debug.Log(CurrentDamageText); }
//攻撃を実行 void Attack(BattleRouletteSlotID slotID) { enemyData.Attacked(slotID, playerData); playerAttackGauge.SetValueGradually(playerData.ChargedAttack); playerMagicGauge.SetValueGradually(playerData.ChargedMagic); enemyLife.SetEnemyLifeGradually(enemyData.CurrentHp, enemyData.hp); if (enemyData.IsDead) { isEndBattle = true; } switch (slotID) { case BattleRouletteSlotID.NormalAttack: effectController.AttackEffect(enemyData, slotID); break; case BattleRouletteSlotID.Critical: TryOpenAchievement(AchievementData.Type.CriticalHit); effectController.AttackEffect(enemyData, slotID); break; case BattleRouletteSlotID.None: TryOpenAchievement(AchievementData.Type.Miss); effectController.AttackEffect(enemyData, slotID); break; case BattleRouletteSlotID.FilreMagic: effectController.AttackEffect(enemyData, slotID); break; case BattleRouletteSlotID.IceMagic: effectController.AttackEffect(enemyData, slotID); break; case BattleRouletteSlotID.ThunderMagic: effectController.AttackEffect(enemyData, slotID); break; case BattleRouletteSlotID.Charge: effectController.AttackEffect(enemyData, slotID); break; default: break; } if (enemyData.IsWeakNess(slotID)) { TryOpenAchievement(AchievementData.Type.WeakNess); } }
//指定角度のスロットの中心角度を取得 void CheckSlot(float rotZ, out float centerRot) { centerRot = 0; float rot = 0; foreach (var item in slots) { rot += item.eulerAngle; if (rotZ < rot) { slotID = item.id; centerRot = rot - (item.eulerAngle / 2); break; } } }
//各種アタックエフェクト public void AttackEffect(EnemyData enemyData, BattleRouletteSlotID slotID) { switch (slotID) { case BattleRouletteSlotID.NormalAttack: enemyDamage.DamageEffect(enemyData, true, true); slashEffect.gameObject.SetActive(true); break; case BattleRouletteSlotID.Critical: enemyDamage.DamageEffect(enemyData, true, true); criticalEffect.gameObject.SetActive(true); break; case BattleRouletteSlotID.None: enemyDamage.DamageEffect(enemyData, false); break; case BattleRouletteSlotID.FilreMagic: enemyDamage.DamageEffect(enemyData, true, false); fireEffect.gameObject.SetActive(true); break; case BattleRouletteSlotID.IceMagic: enemyDamage.DamageEffect(enemyData, true, false); iceEffect.gameObject.SetActive(true); break; case BattleRouletteSlotID.ThunderMagic: enemyDamage.DamageEffect(enemyData, true, false); thunderEffect.gameObject.SetActive(true); break; case BattleRouletteSlotID.Charge: charge.PlaySound(); break; default: break; } }
//攻撃の名前を取得(デバッグ用) static string AttackedName(BattleRouletteSlotID slotID) { switch (slotID) { case BattleRouletteSlotID.NormalAttack: return("通常攻撃"); case BattleRouletteSlotID.Critical: return("クリティカル"); case BattleRouletteSlotID.FilreMagic: return("炎の魔法"); case BattleRouletteSlotID.IceMagic: return("氷の魔法"); case BattleRouletteSlotID.ThunderMagic: return("雷の魔法"); default: return(""); } }
// ダメージ計算 void CalcDamage(BattleRouletteSlotID slotID, BattlePlayerData playerData) { switch (slotID) { case BattleRouletteSlotID.NormalAttack: currentDamage = (playerData.ChargedAttack - deffence) * 100 + RandomDice(3, 6, -7); break; case BattleRouletteSlotID.Critical: currentDamage = (playerData.ChargedAttack - deffence) * 200 + RandomDice(3, 6, -7); break; case BattleRouletteSlotID.FilreMagic: case BattleRouletteSlotID.IceMagic: case BattleRouletteSlotID.ThunderMagic: currentDamage = (playerData.ChargedMagic - magicRes) * 100 + RandomDice(3, 6, -7); break; } currentDamage = Mathf.Max(0, currentDamage); if (IsWeakNess(slotID)) { currentDamage *= 2; } }
//弱点が突かれたか? public bool IsWeakNess(BattleRouletteSlotID slotID) { return(slotID == weakNess); }