using System; using System.Threading.Tasks; using System.Collections.Generic; using JetBrains.Annotations; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Map; namespace Content.Shared.Interfaces.GameObjects.Components { /// /// This interface gives components behavior when being clicked on by a user with an object in their hand /// who is in range and has unobstructed reach of the target entity (allows inside blockers). /// public interface IInteractUsing { /// /// The interaction priority. Higher numbers get called first. /// /// Priority defaults to 0 int Priority => 0; /// /// Called when using one object on another when user is in range of the target entity. /// Task InteractUsing(InteractUsingEventArgs eventArgs); } public class InteractUsingEventArgs : EventArgs, ITargetedInteractEventArgs { public IEntity User { get; set; } public GridCoordinates ClickLocation { get; set; } public IEntity Using { get; set; } public IEntity Target { get; set; } } /// /// Raised when being clicked on or "attacked" by a user with an object in their hand /// [PublicAPI] public class InteractUsingMessage : EntitySystemMessage { /// /// If this message has already been "handled" by a previous system. /// public bool Handled { get; set; } /// /// Entity that triggered the attack. /// public IEntity User { get; } /// /// Entity that the User attacked with. /// public IEntity ItemInHand { get; } /// /// Entity that was attacked. /// public IEntity Attacked { get; } /// /// The original location that was clicked by the user. /// public GridCoordinates ClickLocation { get; } public InteractUsingMessage(IEntity user, IEntity itemInHand, IEntity attacked, GridCoordinates clickLocation) { User = user; ItemInHand = itemInHand; Attacked = attacked; ClickLocation = clickLocation; } } }