using System; using JetBrains.Annotations; using Robust.Shared.Interfaces.GameObjects; namespace Content.Shared.GameObjects { /// /// A verb is an action in the right click menu of an entity. /// Global verbs are visible on all entities, regardless of their components. /// /// /// To add a global verb to all entities, /// define it and mark it with /// public abstract class GlobalVerb { /// /// If true, this verb requires the user to be within /// meters from the entity on which this verb resides. /// public virtual bool RequireInteractionRange => true; /// /// Gets the text string that will be shown to in the right click menu. /// /// The entity of the user opening this menu. /// The text string that is shown in the right click menu for this verb. public abstract string GetText(IEntity user, IEntity target); /// /// Gets the visibility level of this verb in the right click menu. /// /// The entity of the user opening this menu. /// The visibility level of the verb in the client's right click menu. public abstract VerbVisibility GetVisibility(IEntity user, IEntity target); /// /// Invoked when this verb is activated from the right click menu. /// /// The entity of the user opening this menu. /// The entity that is being acted upon. public abstract void Activate(IEntity user, IEntity target); } /// /// This attribute should be used on . These are verbs which are on visible for all entities, /// regardless of the components they contain. /// [MeansImplicitUse] [BaseTypeRequired(typeof(GlobalVerb))] [AttributeUsage(AttributeTargets.Class, Inherited = false)] public sealed class GlobalVerbAttribute : Attribute { } }