using Robust.Shared.Map; using Robust.Shared.Player; using Robust.Shared.Serialization; namespace Content.Shared.Popups { /// /// System for displaying small text popups on users' screens. /// public abstract class SharedPopupSystem : EntitySystem { /// /// Shows a popup on the users' cursors. /// /// The message to display. /// Filter for the players that will see the popup. /// Used to customize how this popup should appear visually. public abstract void PopupCursor(string message, Filter filter, PopupType type=PopupType.Small); /// /// Shows a popup at a world location. /// /// The message to display. /// The coordinates where to display the message. /// Filter for the players that will see the popup. /// Used to customize how this popup should appear visually. public abstract void PopupCoordinates(string message, EntityCoordinates coordinates, Filter filter, PopupType type=PopupType.Small); /// /// Shows a popup above an entity. /// /// The message to display. /// The UID of the entity. /// Filter for the players that will see the popup. /// Used to customize how this popup should appear visually. public abstract void PopupEntity(string message, EntityUid uid, Filter filter, PopupType type=PopupType.Small); } /// /// Common base for all popup network events. /// [Serializable, NetSerializable] public abstract class PopupEvent : EntityEventArgs { public string Message { get; } public PopupType Type { get; } protected PopupEvent(string message, PopupType type) { Message = message; Type = type; } } /// /// Network event for displaying a popup on the user's cursor. /// [Serializable, NetSerializable] public sealed class PopupCursorEvent : PopupEvent { public PopupCursorEvent(string message, PopupType type) : base(message, type) { } } /// /// Network event for displaying a popup at a world location. /// [Serializable, NetSerializable] public sealed class PopupCoordinatesEvent : PopupEvent { public EntityCoordinates Coordinates { get; } public PopupCoordinatesEvent(string message, PopupType type, EntityCoordinates coordinates) : base(message, type) { Coordinates = coordinates; } } /// /// Network event for displaying a popup above an entity. /// [Serializable, NetSerializable] public sealed class PopupEntityEvent : PopupEvent { public EntityUid Uid { get; } public PopupEntityEvent(string message, PopupType type, EntityUid uid) : base(message, type) { Uid = uid; } } /// /// Used to determine how a popup should appear visually to the client. Caution variants simply have a red color. /// /// /// Actions which can fail or succeed should use a smaller popup for failure and a larger popup for success. /// Actions which have different popups for the user vs. others should use a larger popup for the user and a smaller popup for others. /// Actions which result in harm or are otherwise dangerous should always show as the caution variant. /// [Serializable, NetSerializable] public enum PopupType : byte { /// /// Small popups are the default, and denote actions that may be spammable or are otherwise unimportant. /// Small, SmallCaution, /// /// Medium popups should be used for actions which are not spammable but may not be particularly important. /// Medium, MediumCaution, /// /// Large popups should be used for actions which may be important or very important to one or more users, /// but is not life-threatening. /// Large, LargeCaution } }