]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Add Slowdown to Dragging Items that Slow when Held (#29364)
authorCojoke <83733158+Cojoke-dot@users.noreply.github.com>
Mon, 1 Jul 2024 05:33:08 +0000 (00:33 -0500)
committerGitHub <noreply@github.com>
Mon, 1 Jul 2024 05:33:08 +0000 (15:33 +1000)
* Add slowdown to dragging Items that slow when held

* Heh, fancy

* Heh, fancy

* rename SetMovementSpeedModifiers to GetHeldMovementSpeedModifiers because it was not setting anything

Content.Shared/Item/HeldSpeedModifierSystem.cs
Content.Shared/Movement/Pulling/Systems/PullingSystem.cs

index d7afa8f40fa6154024f359668f0cf904f52b3b43..c3286191b987231b342c55312690f2e38dcc4afb 100644 (file)
@@ -29,7 +29,7 @@ public sealed class HeldSpeedModifierSystem : EntitySystem
         _movementSpeedModifier.RefreshMovementSpeedModifiers(args.User);
     }
 
-    private void OnRefreshMovementSpeedModifiers(EntityUid uid, HeldSpeedModifierComponent component, HeldRelayedEvent<RefreshMovementSpeedModifiersEvent> args)
+    public (float,float) GetHeldMovementSpeedModifiers(EntityUid uid, HeldSpeedModifierComponent component)
     {
         var walkMod = component.WalkModifier;
         var sprintMod = component.SprintModifier;
@@ -39,6 +39,12 @@ public sealed class HeldSpeedModifierSystem : EntitySystem
             sprintMod = clothingSpeedModifier.SprintModifier;
         }
 
+        return (walkMod, sprintMod);
+    }
+
+    private void OnRefreshMovementSpeedModifiers(EntityUid uid, HeldSpeedModifierComponent component, HeldRelayedEvent<RefreshMovementSpeedModifiersEvent> args)
+    {
+        var (walkMod, sprintMod) = GetHeldMovementSpeedModifiers(uid, component);
         args.Args.ModifySpeed(walkMod, sprintMod);
     }
 }
index eb2872df9c15f0cdddf1d240d3012e2df619bc1d..edc8ad516172be6b11985b539105321d3d2ed3c0 100644 (file)
@@ -8,6 +8,7 @@ using Content.Shared.Hands;
 using Content.Shared.Hands.EntitySystems;
 using Content.Shared.Input;
 using Content.Shared.Interaction;
+using Content.Shared.Item;
 using Content.Shared.Movement.Events;
 using Content.Shared.Movement.Pulling.Components;
 using Content.Shared.Movement.Pulling.Events;
@@ -43,6 +44,7 @@ public sealed class PullingSystem : EntitySystem
     [Dependency] private readonly SharedInteractionSystem _interaction = default!;
     [Dependency] private readonly SharedPhysicsSystem _physics = default!;
     [Dependency] private readonly SharedPopupSystem _popup = default!;
+    [Dependency] private readonly HeldSpeedModifierSystem _clothingMoveSpeed = default!;
 
     public override void Initialize()
     {
@@ -192,6 +194,14 @@ public sealed class PullingSystem : EntitySystem
 
     private void OnRefreshMovespeed(EntityUid uid, PullerComponent component, RefreshMovementSpeedModifiersEvent args)
     {
+        if (TryComp<HeldSpeedModifierComponent>(component.Pulling, out var heldMoveSpeed) && component.Pulling.HasValue)
+        {
+            var (walkMod, sprintMod) =
+                _clothingMoveSpeed.GetHeldMovementSpeedModifiers(component.Pulling.Value, heldMoveSpeed);
+            args.ModifySpeed(walkMod, sprintMod);
+            return;
+        }
+
         args.ModifySpeed(component.WalkSpeedModifier, component.SprintSpeedModifier);
     }
 
@@ -459,6 +469,7 @@ public sealed class PullingSystem : EntitySystem
 
         // Messaging
         var message = new PullStartedMessage(pullerUid, pullableUid);
+        _modifierSystem.RefreshMovementSpeedModifiers(pullerUid);
         _alertsSystem.ShowAlert(pullerUid, pullerComp.PullingAlert);
         _alertsSystem.ShowAlert(pullableUid, pullableComp.PulledAlert);