+using Content.Shared.DragDrop;
using Content.Shared.Hands.Components;
using Content.Shared.Hands.EntitySystems;
using Content.Shared.Interaction;
base.Initialize();
SubscribeLocalEvent<DeployFoldableComponent, AfterInteractEvent>(OnAfterInteract);
+ SubscribeLocalEvent<DeployFoldableComponent, CanDragEvent>(OnCanDrag);
+ SubscribeLocalEvent<DeployFoldableComponent, DragDropDraggedEvent>(OnDragDropDragged);
+ SubscribeLocalEvent<DeployFoldableComponent, CanDropDraggedEvent>(OnCanDropDragged);
+ }
+
+ private void OnCanDropDragged(Entity<DeployFoldableComponent> ent, ref CanDropDraggedEvent args)
+ {
+ if (args.User != args.Target)
+ return;
+
+ args.Handled = true;
+ args.CanDrop = true;
+ }
+
+ private void OnDragDropDragged(Entity<DeployFoldableComponent> ent, ref DragDropDraggedEvent args)
+ {
+ if (!TryComp<FoldableComponent>(ent, out var foldable)
+ || !_foldable.TrySetFolded(ent, foldable, true))
+ return;
+
+ _hands.PickupOrDrop(args.User, ent.Owner);
+
+ args.Handled = true;
+ }
+
+ private void OnCanDrag(Entity<DeployFoldableComponent> ent, ref CanDragEvent args)
+ {
+ if (!TryComp<FoldableComponent>(ent, out var foldable)
+ || foldable.IsFolded)
+ return;
+
+ args.Handled = true;
}
private void OnAfterInteract(Entity<DeployFoldableComponent> ent, ref AfterInteractEvent args)
private void OnCanDropOn(EntityUid uid, StrippingComponent component, ref CanDropTargetEvent args)
{
- args.Handled = true;
- args.CanDrop |= uid == args.User &&
- HasComp<StrippableComponent>(args.Dragged) &&
- HasComp<HandsComponent>(args.User) &&
- HasComp<StrippingComponent>(args.User);
+ var val = uid == args.User &&
+ HasComp<StrippableComponent>(args.Dragged) &&
+ HasComp<HandsComponent>(args.User) &&
+ HasComp<StrippingComponent>(args.User);
+ args.Handled |= val;
+ args.CanDrop |= val;
}
private void OnCanDrop(EntityUid uid, StrippableComponent component, ref CanDropDraggedEvent args)