From a1a2823a96d7a2f3dc3c84499581ed7df6f5f6cd Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 15 Jul 2025 01:14:54 -0400 Subject: [PATCH] tweaked slow stacking logic --- Assets/Scripts/Entity.cs | 2 +- Assets/Scripts/Status/Slow.cs | 26 ++++++++++++++------------ Assets/Scripts/StatusHandler.cs | 9 +++++++-- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/Assets/Scripts/Entity.cs b/Assets/Scripts/Entity.cs index 29b3f01..a1f2f25 100644 --- a/Assets/Scripts/Entity.cs +++ b/Assets/Scripts/Entity.cs @@ -26,7 +26,7 @@ public abstract class Entity : LevelObject private StatusHandler _statusHandler; // status modifiers - private float _speedStatusModifier = 1; + private float _speedStatusModifier = 1f; //Enemy Spotted private bool _isEnemyDetected = false; diff --git a/Assets/Scripts/Status/Slow.cs b/Assets/Scripts/Status/Slow.cs index 098ad06..01be7d2 100644 --- a/Assets/Scripts/Status/Slow.cs +++ b/Assets/Scripts/Status/Slow.cs @@ -5,8 +5,8 @@ using UnityEngine; public class Slow : Status { - private float _latestSpeedModifier; - private float _cumulativeSpeedModifier = 1; + private float _previousSpeedModifier = 1f; + private float _speedModifier = 1f; public override void Apply(float duration) { @@ -14,18 +14,15 @@ public class Slow : Status _duration = Mathf.Max(_duration, duration); // slow entity - EntityLinked.SpeedStatusModifier *= _latestSpeedModifier; - - // store cumulative speed modifier to revert it later - _cumulativeSpeedModifier *= _latestSpeedModifier; + EntityLinked.SpeedStatusModifier /= _previousSpeedModifier; + Debug.Log(_speedModifier); + EntityLinked.SpeedStatusModifier *= _speedModifier; } public override void Unapply() { // bring entity to normal speed - Debug.Log(EntityLinked.SpeedStatusModifier); - EntityLinked.SpeedStatusModifier /= _cumulativeSpeedModifier; - Debug.Log(EntityLinked.SpeedStatusModifier); + EntityLinked.SpeedStatusModifier /= _speedModifier; // stop effect Destroy(this); @@ -35,8 +32,13 @@ public class Slow : Status /// A higher intensity results in a stronger slow. /// Example: An intensity of 0.99 multiplies the entity's speed by 0.01 (which would result in a really low speed) /// - public float Intensity { - get => 1 - _latestSpeedModifier; - set => _latestSpeedModifier = 1 - value; + public float Intensity + { + get => 1 - _speedModifier; + set + { + _previousSpeedModifier = _speedModifier; + _speedModifier = Mathf.Min(_speedModifier, 1 - value); + } } } diff --git a/Assets/Scripts/StatusHandler.cs b/Assets/Scripts/StatusHandler.cs index 6b948ea..13ac9f6 100644 --- a/Assets/Scripts/StatusHandler.cs +++ b/Assets/Scripts/StatusHandler.cs @@ -27,7 +27,7 @@ public class StatusHandler : MonoBehaviour // check if status already exists activeStatuses.TryGetValue(Enum.StatusType.Slow, out status); - // if status doesn't exist, create it + // if status doesn't exist, instantiate it if (!status) { switch (type) @@ -37,7 +37,12 @@ public class StatusHandler : MonoBehaviour break; default: break; } - activeStatuses.Add(type, status); + + // if key value pair doesn't exist, create it + if (!activeStatuses.ContainsKey(type)) + { + activeStatuses.Add(type, status); + } } // link entity to status