From 9182c201e909e0a9b5e0a49d533b0f8fd03b1a64 Mon Sep 17 00:00:00 2001 From: themias <89101928+themias@users.noreply.github.com> Date: Sat, 4 Nov 2023 11:23:46 -0400 Subject: [PATCH] Enter mech with drag-drop (#21405) --- .../Mech/EntitySystems/SharedMechSystem.cs | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs b/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs index 2af5ac6e0c..23f0ce8a7c 100644 --- a/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs +++ b/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs @@ -4,6 +4,7 @@ using Content.Shared.ActionBlocker; 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; @@ -35,6 +36,7 @@ public abstract class SharedMechSystem : EntitySystem [Dependency] private readonly SharedInteractionSystem _interaction = default!; [Dependency] private readonly SharedMoverController _mover = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; /// public override void Initialize() @@ -45,6 +47,8 @@ public abstract class SharedMechSystem : EntitySystem SubscribeLocalEvent(OnStartup); SubscribeLocalEvent(OnDestruction); SubscribeLocalEvent(OnGetAdditionalAccess); + SubscribeLocalEvent(OnDragDrop); + SubscribeLocalEvent(OnCanDragDrop); SubscribeLocalEvent(OnGetMeleeWeapon); SubscribeLocalEvent(OnCanAttackFromContainer); @@ -420,6 +424,29 @@ public abstract class SharedMechSystem : EntitySystem _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); + } + } /// -- 2.51.2