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
This commit is contained in:
@@ -74,6 +74,12 @@ namespace Content.Shared.GameObjects.Components.Movement
|
||||
return false;
|
||||
}
|
||||
|
||||
if (entity.TryGetComponent(out ICollidableComponent collidable))
|
||||
{
|
||||
var controller = collidable.EnsureController<SlipController>();
|
||||
controller.LinearVelocity = collidable.LinearVelocity;
|
||||
}
|
||||
|
||||
stun.Paralyze(5);
|
||||
_slipped.Add(entity.Uid);
|
||||
|
||||
|
||||
40
Content.Shared/Physics/SlipController.cs
Normal file
40
Content.Shared/Physics/SlipController.cs
Normal file
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user