using Content.Shared.Actions;
using Content.Shared.Destructible;
using Content.Shared.DoAfter;
+using Content.Shared.DragDrop;
using Content.Shared.FixedPoint;
using Content.Shared.Interaction;
using Content.Shared.Interaction.Components;
[Dependency] private readonly SharedInteractionSystem _interaction = default!;
[Dependency] private readonly SharedMoverController _mover = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!;
+ [Dependency] private readonly SharedDoAfterSystem _doAfter = default!;
/// <inheritdoc/>
public override void Initialize()
SubscribeLocalEvent<MechComponent, ComponentStartup>(OnStartup);
SubscribeLocalEvent<MechComponent, DestructionEventArgs>(OnDestruction);
SubscribeLocalEvent<MechComponent, GetAdditionalAccessEvent>(OnGetAdditionalAccess);
+ SubscribeLocalEvent<MechComponent, DragDropTargetEvent>(OnDragDrop);
+ SubscribeLocalEvent<MechComponent, CanDropTargetEvent>(OnCanDragDrop);
SubscribeLocalEvent<MechPilotComponent, GetMeleeWeaponEvent>(OnGetMeleeWeapon);
SubscribeLocalEvent<MechPilotComponent, CanAttackFromContainerEvent>(OnCanAttackFromContainer);
_appearance.SetData(uid, MechVisuals.Open, IsEmpty(component), appearance);
_appearance.SetData(uid, MechVisuals.Broken, component.Broken, appearance);
}
+
+ private void OnDragDrop(EntityUid uid, MechComponent component, ref DragDropTargetEvent args)
+ {
+ if (args.Handled)
+ return;
+
+ args.Handled = true;
+
+ var doAfterEventArgs = new DoAfterArgs(EntityManager, args.Dragged, component.EntryDelay, new MechEntryEvent(), uid, target: uid)
+ {
+ BreakOnUserMove = true,
+ };
+
+ _doAfter.TryStartDoAfter(doAfterEventArgs);
+ }
+
+ private void OnCanDragDrop(EntityUid uid, MechComponent component, ref CanDropTargetEvent args)
+ {
+ args.Handled = true;
+
+ args.CanDrop |= !component.Broken && CanInsert(uid, args.Dragged, component);
+ }
+
}
/// <summary>