From f8f5524fd50abb0d5910b0ca0d0badccd6d14854 Mon Sep 17 00:00:00 2001 From: themias <89101928+themias@users.noreply.github.com> Date: Fri, 12 Jan 2024 15:33:47 -0500 Subject: [PATCH] Limit hydraulic clamps to one DoAfter at a time (#23982) Limit Ripleys to one DoAfter at a time --- .../Mech/Equipment/Components/MechGrabberComponent.cs | 4 ++++ .../Mech/Equipment/EntitySystems/MechGrabberSystem.cs | 11 +++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Content.Server/Mech/Equipment/Components/MechGrabberComponent.cs b/Content.Server/Mech/Equipment/Components/MechGrabberComponent.cs index df94bc94ee..f4b3a985bf 100644 --- a/Content.Server/Mech/Equipment/Components/MechGrabberComponent.cs +++ b/Content.Server/Mech/Equipment/Components/MechGrabberComponent.cs @@ -1,5 +1,6 @@ using System.Numerics; using System.Threading; +using Content.Shared.DoAfter; using Robust.Shared.Audio; using Robust.Shared.Containers; @@ -47,4 +48,7 @@ public sealed partial class MechGrabberComponent : Component [ViewVariables(VVAccess.ReadWrite)] public Container ItemContainer = default!; + + [DataField, ViewVariables(VVAccess.ReadOnly)] + public DoAfterId? DoAfter; } diff --git a/Content.Server/Mech/Equipment/EntitySystems/MechGrabberSystem.cs b/Content.Server/Mech/Equipment/EntitySystems/MechGrabberSystem.cs index 9f5d564d5a..fa46792d2a 100644 --- a/Content.Server/Mech/Equipment/EntitySystems/MechGrabberSystem.cs +++ b/Content.Server/Mech/Equipment/EntitySystems/MechGrabberSystem.cs @@ -128,6 +128,9 @@ public sealed class MechGrabberSystem : EntitySystem if (args.Handled || args.Target is not {} target) return; + if (args.Target == args.User || component.DoAfter != null) + return; + if (TryComp(target, out var physics) && physics.BodyType == BodyType.Static || HasComp(target) || HasComp(target)) @@ -152,15 +155,19 @@ public sealed class MechGrabberSystem : EntitySystem args.Handled = true; component.AudioStream = _audio.PlayPvs(component.GrabSound, uid).Value.Entity; - _doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, args.User, component.GrabDelay, new GrabberDoAfterEvent(), uid, target: target, used: uid) + var doAfterArgs = new DoAfterArgs(EntityManager, args.User, component.GrabDelay, new GrabberDoAfterEvent(), uid, target: target, used: uid) { BreakOnTargetMove = true, BreakOnUserMove = true - }); + }; + + _doAfter.TryStartDoAfter(doAfterArgs, out component.DoAfter); } private void OnMechGrab(EntityUid uid, MechGrabberComponent component, DoAfterEvent args) { + component.DoAfter = null; + if (args.Cancelled) { component.AudioStream = _audio.Stop(component.AudioStream);