using System; using System.Collections.Generic; using System.Linq; using UnityEngine; namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule { public sealed class Status { public StatusDefinitionSO definition { get; private set; } public StatusModule statusModule { get; private set; } public float timeRemaining { get; private set; } public List effects { get; private set; } internal Status(StatusDefinitionSO definition, StatusModule statusModule) { this.definition = definition; this.statusModule = statusModule; timeRemaining = definition.time; effects = definition.effects.Select(e => { var copy = JsonUtility.FromJson(JsonUtility.ToJson(e)); copy.obj = statusModule.parent; copy.status = this; return copy; }).ToList(); } internal void UpdateTime_Internal(float deltaTime) { if (definition.permanent) return; timeRemaining -= deltaTime; if (timeRemaining <= 0) statusModule.End(this); } internal void OnApply_Internal() => effects.ForEach(effect => effect.OnApply_Internal()); internal void OnEnd_Internal() => effects.ForEach(effect => effect.OnEnd_Internal()); internal void OnRemove_Internal() => effects.ForEach(effect => effect.OnRemove_Internal()); } }