using Content.Shared.DragDrop; using Content.Shared.Hands.Components; using Content.Shared.Strip.Components; namespace Content.Shared.Strip; public abstract class SharedStrippableSystem : EntitySystem { public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnCanDropOn); SubscribeLocalEvent(OnCanDrop); SubscribeLocalEvent(OnDragDrop); } private void OnDragDrop(EntityUid uid, StrippableComponent component, ref DragDropDraggedEvent args) { // If the user drags a strippable thing onto themselves. if (args.Handled || args.Target != args.User) return; StartOpeningStripper(args.User, component); args.Handled = true; } public virtual void StartOpeningStripper(EntityUid user, StrippableComponent component, bool openInCombat = false) { } private void OnCanDropOn(EntityUid uid, StrippingComponent component, ref CanDropTargetEvent args) { args.Handled = true; args.CanDrop |= uid == args.User && HasComp(args.Dragged) && HasComp(args.User); } private void OnCanDrop(EntityUid uid, StrippableComponent component, ref CanDropDraggedEvent args) { args.CanDrop |= args.Target == args.User && HasComp(args.User) && HasComp(args.User); if (args.CanDrop) args.Handled = true; } }