using System; using JetBrains.Annotations; using Robust.Shared.Analyzers; using Robust.Shared.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 /// outside the range of direct use /// [RequiresExplicitImplementation] public interface IRangedInteract { /// /// Called when we try to interact with an entity out of range /// /// bool RangedInteract(RangedInteractEventArgs eventArgs); } [PublicAPI] public class RangedInteractEventArgs : EventArgs { public IEntity User { get; set; } public IEntity Using { get; set; } public EntityCoordinates ClickLocation { get; set; } } /// /// Raised when being clicked by objects outside the range of direct use. /// [PublicAPI] public class RangedInteractMessage : HandledEntityEventArgs { /// /// Entity that triggered the attack. /// public IEntity User { get; } /// /// Entity that the User attacked with. /// public IEntity ItemInHand { get; set; } /// /// Entity that was attacked. /// public IEntity Attacked { get; } /// /// Location that the user clicked outside of their interaction range. /// public EntityCoordinates ClickLocation { get; } public RangedInteractMessage(IEntity user, IEntity itemInHand, IEntity attacked, EntityCoordinates clickLocation) { User = user; ItemInHand = itemInHand; ClickLocation = clickLocation; Attacked = attacked; } } }