From a91a907fc50f2e54644688282d9478315dc0956c Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Tue, 28 Jul 2020 15:53:51 +0200 Subject: [PATCH] Add slipping moving you forward a few tiles (#1520) * Add slipping moving you forward * Check for weightless and change decay to a multiplier * Pragma moment --- .../Movement/SharedSlipperyComponent.cs | 6 +++ Content.Shared/Physics/SlipController.cs | 40 +++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 Content.Shared/Physics/SlipController.cs diff --git a/Content.Shared/GameObjects/Components/Movement/SharedSlipperyComponent.cs b/Content.Shared/GameObjects/Components/Movement/SharedSlipperyComponent.cs index c0695cb160..f467ac7642 100644 --- a/Content.Shared/GameObjects/Components/Movement/SharedSlipperyComponent.cs +++ b/Content.Shared/GameObjects/Components/Movement/SharedSlipperyComponent.cs @@ -74,6 +74,12 @@ namespace Content.Shared.GameObjects.Components.Movement return false; } + if (entity.TryGetComponent(out ICollidableComponent collidable)) + { + var controller = collidable.EnsureController(); + controller.LinearVelocity = collidable.LinearVelocity; + } + stun.Paralyze(5); _slipped.Add(entity.Uid); diff --git a/Content.Shared/Physics/SlipController.cs b/Content.Shared/Physics/SlipController.cs new file mode 100644 index 0000000000..f5f3004a3f --- /dev/null +++ b/Content.Shared/Physics/SlipController.cs @@ -0,0 +1,40 @@ +using Robust.Shared.Interfaces.Physics; +using Robust.Shared.IoC; +using Robust.Shared.Physics; + +namespace Content.Shared.Physics +{ + public class SlipController : VirtualController + { +#pragma warning disable 649 + [Dependency] private readonly IPhysicsManager _physicsManager; +#pragma warning restore 649 + + public SlipController() + { + IoCManager.InjectDependencies(this); + } + + private float Decay { get; set; } = 0.95f; + + public override void UpdateAfterProcessing() + { + if (ControlledComponent == null) + { + return; + } + + if (_physicsManager.IsWeightless(ControlledComponent.Owner.Transform.GridPosition)) + { + return; + } + + LinearVelocity *= Decay; + + if (LinearVelocity.Length < 0.001) + { + Stop(); + } + } + } +}