36 lines
1.1 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|