using System; using System.Collections.Generic; using Robust.Shared.GameObjects; using Robust.Shared.Serialization; namespace Content.Shared.GameObjects.Components.Mobs { /// /// Handles the icons on the right side of the screen. /// Should only be used for player-controlled entities /// public abstract class SharedStatusEffectsComponent : Component { public override string Name => "StatusEffectsUI"; public override uint? NetID => ContentNetIDs.STATUSEFFECTS; public abstract IReadOnlyDictionary Statuses { get; } public abstract void ChangeStatusEffectIcon(StatusEffect effect, string icon); public abstract void ChangeStatusEffect(StatusEffect effect, string icon, ValueTuple? cooldown); public abstract void RemoveStatusEffect(StatusEffect effect); } [Serializable, NetSerializable] public class StatusEffectComponentState : ComponentState { public Dictionary StatusEffects; public StatusEffectComponentState(Dictionary statusEffects) : base(ContentNetIDs.STATUSEFFECTS) { StatusEffects = statusEffects; } } /// /// A message that calls the click interaction on a status effect /// [Serializable, NetSerializable] public class ClickStatusMessage : ComponentMessage { public readonly StatusEffect Effect; public ClickStatusMessage(StatusEffect effect) { Directed = true; Effect = effect; } } [Serializable, NetSerializable] public struct StatusEffectStatus { public string Icon; public ValueTuple? Cooldown; } // Each status effect is assumed to be unique public enum StatusEffect { Health, Hunger, Thirst, Pressure, Fire, Temperature, Stun, Cuffed, Buckled, Piloting, Pulling, Pulled, Weightless } }