using Robust.Shared.GameStates; using Robust.Shared.Serialization; namespace Content.Shared.StatusEffect { [RegisterComponent] [NetworkedComponent] [Friend(typeof(StatusEffectsSystem))] public sealed class StatusEffectsComponent : Component { [ViewVariables] public Dictionary ActiveEffects = new(); /// /// A list of status effect IDs to be allowed /// [DataField("allowed", required: true)] public List AllowedEffects = default!; } [RegisterComponent] public sealed class ActiveStatusEffectsComponent : Component {} /// /// Holds information about an active status effect. /// [Serializable, NetSerializable] public sealed class StatusEffectState { /// /// The start and end times of the status effect. /// [ViewVariables] public (TimeSpan, TimeSpan) Cooldown; /// /// Specifies whether to refresh or accumulate the cooldown of the status effect. /// true - refresh time, false - accumulate time. /// [ViewVariables] public bool CooldownRefresh = true; /// /// The name of the relevant component that /// was added alongside the effect, if any. /// [ViewVariables] public string? RelevantComponent; public StatusEffectState((TimeSpan, TimeSpan) cooldown, bool refresh, string? relevantComponent=null) { Cooldown = cooldown; CooldownRefresh = refresh; RelevantComponent = relevantComponent; } } [Serializable, NetSerializable] public sealed class StatusEffectsComponentState : ComponentState { public Dictionary ActiveEffects; public List AllowedEffects; public StatusEffectsComponentState(Dictionary activeEffects, List allowedEffects) { ActiveEffects = activeEffects; AllowedEffects = allowedEffects; } } }