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
{
}
}