60 lines
1.9 KiB
C#
60 lines
1.9 KiB
C#
using Godot;
|
|
using GdUnit4;
|
|
using static GdUnit4.Assertions;
|
|
using Movementtests.interfaces;
|
|
using Movementtests.systems.damage;
|
|
|
|
namespace Movementtests.tests;
|
|
|
|
[TestSuite, RequireGodotRuntime]
|
|
public class DamageComponentUnitTest
|
|
{
|
|
[TestCase]
|
|
public void DamageModifier_Applies_WhenTypeMatches()
|
|
{
|
|
var modifier = new RDamageModifier(EDamageTypes.Normal, 2.0f);
|
|
var input = new DamageRecord(Vector3.Zero, new RDamage(10.0f, EDamageTypes.Normal));
|
|
|
|
var result = modifier.TakeDamage(input);
|
|
AssertFloat(result.Damage.DamageDealt).IsEqual(20.0f);
|
|
}
|
|
|
|
[TestCase]
|
|
public void DamageModifier_Ignores_WhenTypeDifferent()
|
|
{
|
|
var modifier = new RDamageModifier(EDamageTypes.Fire, 3.0f);
|
|
var input = new DamageRecord(Vector3.Zero, new RDamage(10.0f, EDamageTypes.Normal));
|
|
|
|
var result = modifier.TakeDamage(input);
|
|
AssertFloat(result.Damage.DamageDealt).IsEqual(0.0f);
|
|
}
|
|
|
|
[TestCase]
|
|
public void CDamageable_Sums_All_Modifiers()
|
|
{
|
|
var mod1 = new RDamageModifier(EDamageTypes.Normal, 1.0f);
|
|
var mod2 = new RDamageModifier(EDamageTypes.Normal, 0.5f);
|
|
|
|
var cDamageable = new CDamageable();
|
|
cDamageable.DamageModifiers = new[] { mod1, mod2 };
|
|
|
|
var input = new DamageRecord(Vector3.Zero, new RDamage(10.0f, EDamageTypes.Normal));
|
|
var result = cDamageable.TakeDamage(input);
|
|
|
|
// 10*1.0 + 10*0.5 = 15
|
|
AssertFloat(result.Damage.DamageDealt).IsEqual(15.0f);
|
|
}
|
|
|
|
[TestCase]
|
|
public void CDamageable_ComputeDamage_DoesNotEmit()
|
|
{
|
|
var mod = new RDamageModifier(EDamageTypes.Normal, 2.0f);
|
|
var cDamageable = new CDamageable();
|
|
cDamageable.DamageModifiers = new[] { mod };
|
|
|
|
var input = new DamageRecord(Vector3.Zero, new RDamage(5.0f, EDamageTypes.Normal));
|
|
var result = cDamageable.ComputeDamage(input);
|
|
AssertFloat(result.Damage.DamageDealt).IsEqual(10.0f);
|
|
}
|
|
}
|