using Content.Shared.Whitelist; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.Utility; namespace Content.Shared.Chat.Prototypes; /// /// IC emotes (scream, smile, clapping, etc). /// Entities can activate emotes by chat input, radial or code. /// [Prototype] public sealed partial class EmotePrototype : IPrototype { [IdDataField] public string ID { get; private set; } = default!; /// /// Localization string for the emote name. Displayed in the radial UI. /// [DataField(required: true)] public string Name = default!; /// /// Determines if emote available to all by default /// check comes after this setting /// can ignore this setting /// [DataField] public bool Available = true; /// /// Different emote categories may be handled by different systems. /// Also may be used for filtering. /// [DataField] public EmoteCategory Category = EmoteCategory.General; /// /// An icon used to visually represent the emote in radial UI. /// [DataField] public SpriteSpecifier Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/Actions/scream.png")); /// /// Determines conditions to this emote be available to use /// [DataField] public EntityWhitelist? Whitelist; /// /// Determines conditions to this emote be unavailable to use /// [DataField] public EntityWhitelist? Blacklist; /// /// Collection of words that will be sent to chat if emote activates. /// Will be picked randomly from list. /// [DataField] public List ChatMessages = new(); /// /// Trigger words for emote. Case independent. /// When typed into players chat they will activate emote event. /// All words should be unique across all emote prototypes. /// [DataField] public HashSet ChatTriggers = new(); } /// /// IC emote category. Usually physical source of emote, /// like hands, voice, face, etc. /// [Flags] [Serializable, NetSerializable] public enum EmoteCategory : byte { Invalid = 0, Vocal = 1 << 0, Hands = 1 << 1, General = byte.MaxValue }