From d4dc30bd7a01b99b740fdcc34b18fcd3101a52bb Mon Sep 17 00:00:00 2001 From: Gabriel Kaszewski Date: Thu, 14 May 2026 01:05:31 +0200 Subject: [PATCH] fix: speed effects stack multiplicatively --- .../Status/Effects/LightFootedEffect.cs | 2 +- .../Domain/Status/Effects/SpeedBoostEffect.cs | 2 +- Assets/Tests/EditMode/StatusManagerTests.cs | 26 +++++++++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/Core/Domain/Status/Effects/LightFootedEffect.cs b/Assets/Scripts/Core/Domain/Status/Effects/LightFootedEffect.cs index ff47bee..48cd203 100644 --- a/Assets/Scripts/Core/Domain/Status/Effects/LightFootedEffect.cs +++ b/Assets/Scripts/Core/Domain/Status/Effects/LightFootedEffect.cs @@ -19,7 +19,7 @@ namespace Core.Domain.Status.Effects public void ModifyCapabilities(ref PlayerCapabilities caps) { caps.CanTriggerDecay = false; - caps.SpeedMultiplier = 1.2f; + caps.SpeedMultiplier *= 1.2f; } public void OnApply() diff --git a/Assets/Scripts/Core/Domain/Status/Effects/SpeedBoostEffect.cs b/Assets/Scripts/Core/Domain/Status/Effects/SpeedBoostEffect.cs index ab54019..97da305 100644 --- a/Assets/Scripts/Core/Domain/Status/Effects/SpeedBoostEffect.cs +++ b/Assets/Scripts/Core/Domain/Status/Effects/SpeedBoostEffect.cs @@ -20,7 +20,7 @@ namespace Core.Domain.Status.Effects public void ModifyCapabilities(ref PlayerCapabilities caps) { - caps.SpeedMultiplier = _multiplier; + caps.SpeedMultiplier *= _multiplier; } public void OnApply() { } diff --git a/Assets/Tests/EditMode/StatusManagerTests.cs b/Assets/Tests/EditMode/StatusManagerTests.cs index 4700536..c913097 100644 --- a/Assets/Tests/EditMode/StatusManagerTests.cs +++ b/Assets/Tests/EditMode/StatusManagerTests.cs @@ -1,5 +1,6 @@ using NUnit.Framework; using Core.Domain.Status; +using Core.Domain.Status.Effects; namespace DecayGrid.Tests { @@ -14,5 +15,30 @@ namespace DecayGrid.Tests Assert.AreEqual(1f, caps.SpeedMultiplier, 0.001f); Assert.IsFalse(caps.CanHover); } + + [Test] + public void SpeedBoostAlone_AppliesMultiplier() + { + var sm = new StatusManager(); + sm.AddEffect(new SpeedBoostEffect(10f, 1.5f)); + Assert.AreEqual(1.5f, sm.CurrentCapabilities.SpeedMultiplier, 0.001f); + } + + [Test] + public void LightFootedAlone_AppliesMultiplier() + { + var sm = new StatusManager(); + sm.AddEffect(new LightFootedEffect(10f)); + Assert.AreEqual(1.2f, sm.CurrentCapabilities.SpeedMultiplier, 0.001f); + } + + [Test] + public void TwoSpeedEffectsStack_Multiplicatively() + { + var sm = new StatusManager(); + sm.AddEffect(new LightFootedEffect(10f)); // *1.2 + sm.AddEffect(new SpeedBoostEffect(10f, 1.5f)); // *1.5 + Assert.AreEqual(1.8f, sm.CurrentCapabilities.SpeedMultiplier, 0.001f); // 1.0 * 1.2 * 1.5 + } } }