Refactor Enemy
This commit is contained in:
23
src/system/IHasPrimaryAttack.cs
Normal file
23
src/system/IHasPrimaryAttack.cs
Normal file
@@ -0,0 +1,23 @@
|
||||
namespace GameJamDungeon
|
||||
{
|
||||
public interface IHasPrimaryAttack
|
||||
{
|
||||
public ElementType PrimaryAttackElementalType { set; }
|
||||
public double PrimaryAttackElementalDamageBonus { set; }
|
||||
|
||||
public void PrimaryAttack();
|
||||
}
|
||||
|
||||
public interface IHasSecondaryAttack
|
||||
{
|
||||
public ElementType SecondaryAttackElementalType { set; }
|
||||
public double SecondaryAttackElementalDamageBonus { set; }
|
||||
|
||||
public void SecondaryAttack();
|
||||
}
|
||||
|
||||
public interface IHasPrimarySkill
|
||||
{
|
||||
public void PrimarySkill();
|
||||
}
|
||||
}
|
||||
@@ -4,68 +4,10 @@ namespace GameJamDungeon
|
||||
{
|
||||
public static class DamageCalculator
|
||||
{
|
||||
public static double CalculateWeaponAttackDamage(int totalAttack, EnemyStatResource enemyStatResource, WeaponStats weapon, bool isCriticalHit)
|
||||
public static double CalculateWeaponAttackDamage(int totalAttack, WeaponStats weapon)
|
||||
{
|
||||
var hydricResistance = enemyStatResource.HydricResistance;
|
||||
var igneousResistance = enemyStatResource.IgneousResistance;
|
||||
var telluricResistance = enemyStatResource.TelluricResistance;
|
||||
var aeolicResistance = enemyStatResource.AeolicResistance;
|
||||
var ferrumResistance = enemyStatResource.FerrumResistance;
|
||||
|
||||
if (weapon.WeaponTags.Contains(WeaponTag.IgnoreAffinity))
|
||||
{
|
||||
hydricResistance = 0;
|
||||
igneousResistance = 0;
|
||||
telluricResistance = 0;
|
||||
aeolicResistance = 0;
|
||||
ferrumResistance = 0;
|
||||
}
|
||||
|
||||
var elementADamage = (weapon.BaseHydricDamageBonus > 0 ? weapon.BaseHydricDamageBonus - hydricResistance : 0) / 100;
|
||||
var elementBDamage = (weapon.IgneousDamageBonus > 0 ? weapon.IgneousDamageBonus - igneousResistance : 0) / 100;
|
||||
var elementCDamage = (weapon.TelluricDamageBonus > 0 ? weapon.TelluricDamageBonus - telluricResistance : 0) / 100;
|
||||
var elementDDamage = (weapon.AeolicDamageBonus > 0 ? weapon.AeolicDamageBonus - aeolicResistance : 0) / 100;
|
||||
var elementEDamage = (weapon.FerrumDamageBonus > 0 ? weapon.FerrumDamageBonus - ferrumResistance : 0) / 100;
|
||||
var elementalBonusDamage = totalAttack + (totalAttack * elementADamage) + (totalAttack * elementBDamage) + (totalAttack * elementCDamage) + (totalAttack * elementDDamage) + (totalAttack * elementEDamage);
|
||||
var calculatedDamage = elementalBonusDamage - enemyStatResource.CurrentDefense;
|
||||
|
||||
if (isCriticalHit)
|
||||
calculatedDamage *= 2;
|
||||
|
||||
return Mathf.Max(calculatedDamage, 0.0);
|
||||
}
|
||||
|
||||
public static double CalculateEnemyAttackDamage(int playerTotalDefense, EnemyStatResource enemyStatResource, ArmorStats armor, bool isCriticalHit)
|
||||
{
|
||||
var totalAttack = enemyStatResource.CurrentAttack;
|
||||
var elementADamage = (enemyStatResource.BaseHydricDamageBonus > 0 ? enemyStatResource.BaseHydricDamageBonus - armor.HydricResistance : 0) / 100;
|
||||
var elementBDamage = (enemyStatResource.IgneousDamageBonus > 0 ? enemyStatResource.IgneousDamageBonus - armor.IgneousResistance : 0) / 100;
|
||||
var elementCDamage = (enemyStatResource.TelluricDamageBonus > 0 ? enemyStatResource.TelluricDamageBonus - armor.TelluricResistance : 0) / 100;
|
||||
var elementDDamage = (enemyStatResource.AeolicDamageBonus > 0 ? enemyStatResource.AeolicDamageBonus - armor.AeolicResistance : 0) / 100;
|
||||
var elementEDamage = (enemyStatResource.FerrumDamageBonus > 0 ? enemyStatResource.FerrumDamageBonus - armor.FerrumResistance : 0) / 100;
|
||||
var elementalBonusDamage = totalAttack + (totalAttack * elementADamage) + (totalAttack * elementBDamage) + (totalAttack * elementCDamage) + (totalAttack * elementDDamage) + (totalAttack * elementEDamage);
|
||||
var calculatedDamage = elementalBonusDamage - playerTotalDefense - (armor != null ? armor.Defense : 0);
|
||||
|
||||
if (isCriticalHit)
|
||||
calculatedDamage *= 2;
|
||||
|
||||
return Mathf.Max(calculatedDamage, 0.0);
|
||||
}
|
||||
|
||||
public static double CalculateThrownItemDamage(int baseThrowDamage, EnemyStatResource enemyStatResource, ThrowableItemStats throwableItemStats)
|
||||
{
|
||||
if (throwableItemStats.ThrowableItemTags.Contains(ThrowableItemTag.InflictAeolicDamage))
|
||||
return Mathf.Max(baseThrowDamage * enemyStatResource.AeolicResistance, 0.0);
|
||||
if (throwableItemStats.ThrowableItemTags.Contains(ThrowableItemTag.InflictFerrumDamage))
|
||||
return Mathf.Max(baseThrowDamage * enemyStatResource.FerrumResistance, 0.0);
|
||||
if (throwableItemStats.ThrowableItemTags.Contains(ThrowableItemTag.InflictHydricDamage))
|
||||
return Mathf.Max(baseThrowDamage * enemyStatResource.HydricResistance, 0.0);
|
||||
if (throwableItemStats.ThrowableItemTags.Contains(ThrowableItemTag.InflictIgneousDamage))
|
||||
return Mathf.Max(baseThrowDamage * enemyStatResource.IgneousResistance, 0.0);
|
||||
if (throwableItemStats.ThrowableItemTags.Contains(ThrowableItemTag.InflictTelluricDamage))
|
||||
return Mathf.Max(baseThrowDamage * enemyStatResource.TelluricResistance, 0.0);
|
||||
|
||||
return Mathf.Max(baseThrowDamage, 0.0);
|
||||
var totalDamage = totalAttack * weapon.ElementalDamageBonus;
|
||||
return Mathf.Max(totalDamage, 0.0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user