Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ModiBuff/ModiBuff.Benchmarks/BenchmarkModifierRecipes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ protected override void SetupRecipes()
{
var initComponent = new InitComponent(new IEffect[] { new DamageEffect(5) }, null);

var modifier = new Modifier(id, genId, name, initComponent, null, null, null,
var modifier = new Modifier(id, genId, name, initComponent, null, null, null, null,
new SingleTargetComponent(), null, null, null);

return modifier;
Expand Down
45 changes: 45 additions & 0 deletions ModiBuff/ModiBuff.Tests/AddModifierWithDataTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,30 @@ public void AddWithData_CustomInterval()
Assert.AreEqual(UnitHealth - 5 - 5, Unit.Health);
}

[Test]
public void AddWithData_CustomIntervalTick()
{
AddRecipe("IntervalTickDamage")
.IntervalTick(1)
.Effect(new DamageEffect(5), EffectOn.IntervalTick);
Setup();

IData[] data =
{
new ModifierIntervalTickData(2)
};
Unit.AddModifierWithDataSelf("IntervalTickDamage", data);

Unit.UpdateTick();
Assert.AreEqual(UnitHealth, Unit.Health);

Unit.UpdateTick();
Assert.AreEqual(UnitHealth - 5, Unit.Health);

Unit.UpdateTicks(2);
Assert.AreEqual(UnitHealth - 5 - 5, Unit.Health);
}

[Test]
public void AddWithData_CustomDuration()
{
Expand All @@ -149,6 +173,27 @@ public void AddWithData_CustomDuration()
Assert.AreEqual(UnitHealth - 5, Unit.Health);
}

[Test]
public void AddWithData_CustomDurationTick()
{
AddRecipe("DurationTickDamage")
.DurationTick(2)
.Effect(new DamageEffect(5), EffectOn.DurationTick);
Setup();

IData[] data =
{
new ModifierDurationTickData(3)
};
Unit.AddModifierWithDataSelf("DurationTickDamage", data);

Unit.UpdateTicks(2);
Assert.AreEqual(UnitHealth, Unit.Health);

Unit.UpdateTicks(1);
Assert.AreEqual(UnitHealth - 5, Unit.Health);
}

[Test]
public void AddWithData_StartingStacks()
{
Expand Down
2 changes: 1 addition & 1 deletion ModiBuff/ModiBuff.Tests/CooldownTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ public void InitDamage_CooldownLowerWhenStunned_Manual()
var damageEffect = new DamageEffect(5);
var initComponent = new InitComponent(new IEffect[] { callback, damageEffect }, check);

return new Modifier(id, genId, name, initComponent, null, null, check, new SingleTargetComponent(),
return new Modifier(id, genId, name, initComponent, null, null, null, check, new SingleTargetComponent(),
null, null, null);
});
Setup();
Expand Down
90 changes: 90 additions & 0 deletions ModiBuff/ModiBuff.Tests/DurationTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,27 @@ public void Duration_Damage()

Unit.AddModifierSelf("DurationDamage");

Unit.UpdateTicks(5);
Assert.AreEqual(UnitHealth, Unit.Health);

Unit.Update(5);
Assert.AreEqual(UnitHealth - 5, Unit.Health);
}

[Test]
public void DurationTick_Damage()
{
AddRecipe("DurationTickDamage")
.Effect(new DamageEffect(5), EffectOn.DurationTick)
.DurationTick(5);
Setup();

Unit.AddModifierSelf("DurationTickDamage");

Unit.Update(5);
Assert.AreEqual(UnitHealth, Unit.Health);

Unit.UpdateTicks(5);
Assert.AreEqual(UnitHealth - 5, Unit.Health);
}

Expand All @@ -35,6 +54,20 @@ public void Duration_Remove()
Assert.False(Unit.ContainsModifier("DurationRemove"));
}

[Test]
public void DurationTick_Remove()
{
AddRecipe("DurationTickRemove")
.RemoveTicks(5);
Setup();

Unit.AddModifierSelf("DurationTickRemove");

Unit.UpdateTicks(5);

Assert.False(Unit.ContainsModifier("DurationTickRemove"));
}

[Test]
public void Duration_Damage_Once()
{
Expand All @@ -54,6 +87,25 @@ public void Duration_Damage_Once()
Assert.AreEqual(UnitHealth - 5, Unit.Health);
}

[Test]
public void DurationTick_Damage_Once()
{
AddRecipe("DurationTickDamage")
.Effect(new DamageEffect(5), EffectOn.DurationTick)
.DurationTick(5);
Setup();

Unit.AddModifierSelf("DurationTickDamage");

Unit.UpdateTicks(5);

Assert.AreEqual(UnitHealth - 5, Unit.Health);

Unit.UpdateTicks(5);

Assert.AreEqual(UnitHealth - 5, Unit.Health);
}

[Test]
public void TwoModifiersSameDurationRemove()
{
Expand All @@ -71,5 +123,43 @@ public void TwoModifiersSameDurationRemove()
Assert.False(Unit.ContainsModifier("DurationRemove"));
Assert.False(Unit.ContainsModifier("DurationRemove2"));
}

[Test]
public void TwoModifiersSameDurationTickRemove()
{
AddRecipe("DurationTickRemove")
.RemoveTicks(5);
AddRecipe("DurationTickRemove2")
.RemoveTicks(5);
Setup();

Unit.AddModifierSelf("DurationTickRemove");
Unit.AddModifierSelf("DurationTickRemove2");

Unit.UpdateTicks(5);

Assert.False(Unit.ContainsModifier("DurationTickRemove"));
Assert.False(Unit.ContainsModifier("DurationTickRemove2"));
}

[Test]
public void MixedDurationAndDurationTickRemove()
{
AddRecipe("DurationMixedRemove")
.Remove(5)
.RemoveTicks(10);
Setup();

Unit.AddModifierSelf("DurationMixedRemove");

Unit.Update(4f);
Unit.UpdateTicks(9);

Assert.True(Unit.ContainsModifier("DurationMixedRemove"));

Unit.UpdateTicks(1);

Assert.False(Unit.ContainsModifier("DurationMixedRemove"));
}
}
}
79 changes: 79 additions & 0 deletions ModiBuff/ModiBuff.Tests/IntervalTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
using ModiBuff.Core;
using ModiBuff.Core.Units;
using NUnit.Framework;

namespace ModiBuff.Tests
{
public sealed class IntervalTests : ModifierTests
{
[Test]
public void IntervalTick_Damage()
{
AddRecipe("IntervalTick_Damage")
.Effect(new DamageEffect(5), EffectOn.IntervalTick)
.IntervalTick(2);
Setup();

Unit.AddModifierSelf("IntervalTick_Damage");

Unit.Update(1);
Assert.AreEqual(UnitHealth, Unit.Health);

Unit.UpdateTick();
Assert.AreEqual(UnitHealth, Unit.Health);

Unit.UpdateTick();
Assert.AreEqual(UnitHealth - 5, Unit.Health);

Unit.UpdateTick();
Unit.UpdateTick();
Assert.AreEqual(UnitHealth - 10, Unit.Health);
}

[Test]
public void IntervalTimeTick_Damage()
{
AddRecipe("IntervalTimeTick_Damage")
.Effect(new DamageEffect(5), EffectOn.Interval)
.Interval(2)
.Effect(new DamageEffect(5), EffectOn.IntervalTick)
.IntervalTick(2);
Setup();

Unit.AddModifierSelf("IntervalTimeTick_Damage");

Unit.Update(1);
Assert.AreEqual(UnitHealth, Unit.Health);

Unit.UpdateTick();
Assert.AreEqual(UnitHealth, Unit.Health);

Unit.UpdateTick();
Assert.AreEqual(UnitHealth - 5, Unit.Health);

Unit.Update(1);
Assert.AreEqual(UnitHealth - 10, Unit.Health);
}

[Test]
public void IntervalTick_Refresh_Damage()
{
AddRecipe("IntervalTick_Refresh_Damage")
.Effect(new DamageEffect(5), EffectOn.Interval)
.Interval(2)
.Effect(new DamageEffect(5), EffectOn.IntervalTick)
.IntervalTick(2).Refresh();
Setup();

Unit.AddModifierSelf("IntervalTick_Refresh_Damage");
Unit.Update(1);
Unit.UpdateTick();
Assert.AreEqual(UnitHealth, Unit.Health);

Unit.AddModifierSelf("IntervalTick_Refresh_Damage");
Unit.Update(1);
Unit.UpdateTick();
Assert.AreEqual(UnitHealth - 5, Unit.Health);
}
}
}
2 changes: 1 addition & 1 deletion ModiBuff/ModiBuff.Tests/ModifierRecipeDataTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public void LegalActionUnitTypeGenerator()
var addDamageEffect = new AddDamageEffect(5);
var initComponent = new InitComponent(new IEffect[] { addDamageEffect }, null);

return new Modifier(id, genId, name, initComponent, null, null, null,
return new Modifier(id, genId, name, initComponent, null, null, null, null,
new SingleTargetComponent(), null, new EffectStateInfo((EffectOn.Init, addDamageEffect)), null);
}, Core.Units.TagType.Default,
customModifierData: new AddModifierCommonData<EnemyUnitType>(ModifierAddType.Self, enemyType));
Expand Down
2 changes: 1 addition & 1 deletion ModiBuff/ModiBuff.Tests/ModifierStateInfoTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public void InitDamage_CorrectBaseDamage_Manual()
var damageEffect = new DamageEffect(5);
var initComponent = new InitComponent(new IEffect[] { damageEffect }, null);

return new Modifier(id, genId, name, initComponent, null, null, null,
return new Modifier(id, genId, name, initComponent, null, null, null, null,
new SingleTargetComponent(), null, new EffectStateInfo((EffectOn.Init, damageEffect)), null);
});
Setup();
Expand Down
4 changes: 2 additions & 2 deletions ModiBuff/ModiBuff.Tests/ModifierTagsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ public void AutomaticTimeComponentTagging()
new IntervalComponent(1f, true, new IEffect[] { new NoOpEffect() }, null)
};

return new Modifier(id, genId, name, null, timeComponents, null, null, new SingleTargetComponent(),
return new Modifier(id, genId, name, null, timeComponents, null, null, null, new SingleTargetComponent(),
null, null, null);
});
AddGenerator("DurationRefreshDamage", (id, genId, name, tag) =>
Expand All @@ -115,7 +115,7 @@ public void AutomaticTimeComponentTagging()
new DurationComponent(1f, true, new IEffect[] { new NoOpEffect() })
};

return new Modifier(id, genId, name, null, timeComponents, null, null, new SingleTargetComponent(),
return new Modifier(id, genId, name, null, timeComponents, null, null, null, new SingleTargetComponent(),
null, null, null);
});
Setup();
Expand Down
2 changes: 1 addition & 1 deletion ModiBuff/ModiBuff.Units/TestModifierInheritanceRecipes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ protected override void SetupRecipes()
{
var initComponent = new InitComponent(new IEffect[] { new DamageEffect(5) }, null);

var modifier = new Modifier(id, genId, name, initComponent, null, null, null,
var modifier = new Modifier(id, genId, name, initComponent, null, null, null, null,
new SingleTargetComponent(), null, null, null);

return modifier;
Expand Down
2 changes: 1 addition & 1 deletion ModiBuff/ModiBuff.Units/TestModifierRecipes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ private void SetupRecipes()
{
var initComponent = new InitComponent(new IEffect[] { new DamageEffect(5) }, null);

var modifier = new Modifier(id, genId, name, initComponent, null, null, null,
var modifier = new Modifier(id, genId, name, initComponent, null, null, null, null,
new SingleTargetComponent(), null, null, null);

return modifier;
Expand Down
11 changes: 11 additions & 0 deletions ModiBuff/ModiBuff.Units/Unit/Unit.cs
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,17 @@ public void Update(float deltaTime)
}
}

internal void UpdateTicks(int count)
{
for (int i = 0; i < count; i++)
UpdateTick();
}

public void UpdateTick()
{
ModifierController.UpdateTick();
}

/// <summary>
/// Should be called before we attack/on attack. For modifiers like split shot that we want to trigger when starting an attack.
/// </summary>
Expand Down
Loading