Demon wall implementation (attack data, takes damage, dies, etc) but mostly placeholders

This commit is contained in:
2025-03-25 00:09:33 -07:00
parent f69c6b94a1
commit 84c4d1b9ce
40 changed files with 20732 additions and 625 deletions

View File

@@ -0,0 +1,52 @@
using Godot;
using Zennysoft.Ma.Adapter.Entity;
namespace Zennysoft.Ma.Adapter
{
public class DamageCalculator : IDamageCalculator
{
public double CalculateDamage(double damage,
ElementType elementType,
double defense,
ElementalResistanceSet elementalResistanceSet,
bool isCriticalHit = false,
bool ignoreDefense = false,
bool ignoreElementalResistance = false)
{
var calculatedDamage = damage;
if (!ignoreElementalResistance)
calculatedDamage = CalculateElementalResistance(calculatedDamage, elementType, elementalResistanceSet);
if (!ignoreDefense)
calculatedDamage = CalculateDefenseResistance(calculatedDamage, defense);
if (isCriticalHit)
calculatedDamage *= 2;
return calculatedDamage;
}
private static double CalculateDefenseResistance(double incomingDamage, double defense)
{
return Mathf.Max(incomingDamage - defense, 0.0);
}
private static double CalculateElementalResistance(
double incomingDamage,
ElementType incomingElementType,
ElementalResistanceSet elementalResistanceSet)
{
var resistance = elementalResistanceSet.ElementalResistance[incomingElementType];
return Mathf.Max(incomingDamage - (incomingDamage * resistance), 0.0);
}
}
public interface IDamageCalculator
{
public double CalculateDamage(double damage,
ElementType elementType,
double defense,
ElementalResistanceSet elementalResistanceSet,
bool isCriticalHit = false,
bool ignoreDefense = false,
bool ignoreElementalResistance = false);
}
}

View File

@@ -0,0 +1,20 @@
namespace Zennysoft.Ma.Adapter.Entity
{
public record ElementalResistanceSet
{
public Dictionary<ElementType, double> ElementalResistance { get; }
public ElementalResistanceSet(double aeolicResistance, double hydricResistance, double igneousResistance, double ferrumResistance, double telluricResistance)
{
ElementalResistance = new Dictionary<ElementType, double>
{
{ ElementType.None, 0 },
{ ElementType.Aeolic, aeolicResistance },
{ ElementType.Hydric, hydricResistance },
{ ElementType.Igneous, igneousResistance },
{ ElementType.Ferrum, ferrumResistance },
{ ElementType.Telluric, telluricResistance },
};
}
}
}

View File

@@ -1,7 +1,5 @@
using Chickensoft.Collections;
using Chickensoft.Introspection;
using Chickensoft.Introspection;
using Chickensoft.Serialization;
using Godot;
namespace Zennysoft.Game.Ma;