using Content.Shared.ActionBlocker; using Content.Shared.DragDrop; using Content.Shared.Hands.Components; using Content.Shared.Inventory; using Robust.Shared.Serialization; namespace Content.Shared.Strip.Components { public abstract class SharedStrippableComponent : Component, IDraggable { public bool CanBeStripped(EntityUid by) { return by != Owner && IoCManager.Resolve().HasComponent(@by) && EntitySystem.Get().CanInteract(@by, Owner); } bool IDraggable.CanDrop(CanDropEvent args) { return args.Target != args.Dragged && args.Target == args.User && CanBeStripped(args.User); } public abstract bool Drop(DragDropEvent args); } [NetSerializable, Serializable] public enum StrippingUiKey : byte { Key, } [NetSerializable, Serializable] public sealed class StrippingInventoryButtonPressed : BoundUserInterfaceMessage { public string Slot { get; } public StrippingInventoryButtonPressed(string slot) { Slot = slot; } } [NetSerializable, Serializable] public sealed class StrippingHandButtonPressed : BoundUserInterfaceMessage { public string Hand { get; } public StrippingHandButtonPressed(string hand) { Hand = hand; } } [NetSerializable, Serializable] public sealed class StrippingHandcuffButtonPressed : BoundUserInterfaceMessage { public EntityUid Handcuff { get; } public StrippingHandcuffButtonPressed(EntityUid handcuff) { Handcuff = handcuff; } } [NetSerializable, Serializable] public sealed class StrippingEnsnareButtonPressed : BoundUserInterfaceMessage { public EntityUid Ensnare { get; } public StrippingEnsnareButtonPressed(EntityUid ensnare) { Ensnare = ensnare; } } [NetSerializable, Serializable] public sealed class StrippingBoundUserInterfaceState : BoundUserInterfaceState { public Dictionary<(string ID, string Name), string> Inventory { get; } public Dictionary Hands { get; } public Dictionary Handcuffs { get; } public Dictionary Ensnare { get; } public StrippingBoundUserInterfaceState(Dictionary<(string ID, string Name), string> inventory, Dictionary hands, Dictionary handcuffs, Dictionary ensnare) { Inventory = inventory; Hands = hands; Handcuffs = handcuffs; Ensnare = ensnare; } } /// /// Used to modify strip times. /// [NetSerializable, Serializable] public sealed class BeforeStripEvent : EntityEventArgs, IInventoryRelayEvent { public readonly float InitialTime; public float Time; public float Additive = 0; public bool Stealth; public SlotFlags TargetSlots { get; } = SlotFlags.GLOVES; public BeforeStripEvent(float initialTime) { InitialTime = Time = initialTime; } } }