diff --git a/Content.Shared/Chasm/ChasmSystem.cs b/Content.Shared/Chasm/ChasmSystem.cs index 86b8d4fc4d..ab5c32eddd 100644 --- a/Content.Shared/Chasm/ChasmSystem.cs +++ b/Content.Shared/Chasm/ChasmSystem.cs @@ -1,11 +1,9 @@ using Content.Shared.ActionBlocker; -using Content.Shared.Buckle.Components; using Content.Shared.Movement.Events; using Content.Shared.StepTrigger.Systems; -using Robust.Shared.Audio; +using Content.Shared.Weapons.Misc; using Robust.Shared.Audio.Systems; using Robust.Shared.Network; -using Robust.Shared.Physics.Components; using Robust.Shared.Timing; namespace Content.Shared.Chasm; @@ -19,6 +17,7 @@ public sealed class ChasmSystem : EntitySystem [Dependency] private readonly ActionBlockerSystem _blocker = default!; [Dependency] private readonly INetManager _net = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedGrapplingGunSystem _grapple = default!; public override void Initialize() { @@ -69,6 +68,12 @@ public sealed class ChasmSystem : EntitySystem private void OnStepTriggerAttempt(EntityUid uid, ChasmComponent component, ref StepTriggerAttemptEvent args) { + if (_grapple.IsEntityHooked(args.Tripper)) + { + args.Cancelled = true; + return; + } + args.Continue = true; } diff --git a/Content.Shared/Weapons/Misc/SharedGrapplingGunSystem.cs b/Content.Shared/Weapons/Misc/SharedGrapplingGunSystem.cs index d27efa4d76..af4a376bd0 100644 --- a/Content.Shared/Weapons/Misc/SharedGrapplingGunSystem.cs +++ b/Content.Shared/Weapons/Misc/SharedGrapplingGunSystem.cs @@ -40,6 +40,7 @@ public abstract class SharedGrapplingGunSystem : EntitySystem SubscribeLocalEvent(OnWeightlessMove); SubscribeAllEvent(OnGrapplingReel); + // TODO: After step trigger refactor, dropping a grappling gun should manually try and activate step triggers it's suppressing. SubscribeLocalEvent(OnGrapplingShot); SubscribeLocalEvent(OnGunActivate); SubscribeLocalEvent(OnGrapplingDeselected); @@ -203,6 +204,25 @@ public abstract class SharedGrapplingGunSystem : EntitySystem } } + /// + /// Checks whether the entity is hooked to something via grappling gun. + /// + /// Entity to check. + /// True if hooked, false otherwise. + public bool IsEntityHooked(Entity entity) + { + if (!Resolve(entity, ref entity.Comp)) + return false; + + foreach (var uid in entity.Comp.Relayed) + { + if (HasComp(uid)) + return true; + } + + return false; + } + private void OnGrappleCollide(EntityUid uid, GrapplingProjectileComponent component, ref ProjectileEmbedEvent args) { if (!Timing.IsFirstTimePredicted)