Files
GameJamDungeon/Zennysoft.Game.Ma.Implementation/Calculators/IDamageCalculator.cs

36 lines
1.1 KiB
C#

using Godot;
using Zennysoft.Ma.Adapter.Entity;
namespace Zennysoft.Ma.Adapter
{
public static class DamageCalculator
{
public static int CalculateDamage(Damage damage, double defense, ElementalResistanceSet elementalResistanceSet)
{
var calculatedDamage = damage.BaseDamage;
if (!damage.IgnoreDefense)
calculatedDamage = CalculateDefenseResistance(calculatedDamage, defense);
if (!damage.IgnoreElementalResistance)
calculatedDamage = CalculateElementalResistance(calculatedDamage, elementalResistanceSet.ElementalResistance[damage.ElementType]);
if (damage.IsCriticalHit)
calculatedDamage *= 2;
return Mathf.Max(1, calculatedDamage);
}
private static int CalculateDefenseResistance(int incomingDamage, double defense)
{
var result = incomingDamage - (int)(incomingDamage * (defense / 100));
return result;
}
private static int CalculateElementalResistance(
int incomingDamage,
double elementalResistance)
{
var result = incomingDamage - (int)(incomingDamage * (elementalResistance / 100));
return result;
}
}
}