using System.Collections; using System.Collections.Generic; using UnityEngine; public class StatusHandler : MonoBehaviour { private Entity _entityLinked; private Dictionary activeStatuses = new(); public void ApplySlow(float intensity, float duration) { // check if effect already applied Slow slow = (Slow)GetStatus(Enum.StatusType.Slow); // init effect params slow.Intensity = intensity; // apply effect slow.Apply(duration); } // please add status to switch case everytime you design one! private Status GetStatus(Enum.StatusType type) { Status status; // check if status already exists activeStatuses.TryGetValue(Enum.StatusType.Slow, out status); // if status doesn't exist, create it if (!status) { switch (type) { case Enum.StatusType.Slow: status = gameObject.AddComponent(); break; default: break; } activeStatuses.Add(type, status); } // link entity to status status.EntityLinked = _entityLinked; return status; } private void Start() { _entityLinked = gameObject.GetComponent(); ; } }