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