Refactor Enemy

This commit is contained in:
2025-02-06 01:58:36 -08:00
parent badc6d2375
commit 4e6c545e81
38 changed files with 581 additions and 589 deletions

View 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();
}
}

View File

@@ -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);
}
}
}