From: Zealith-Gamer <61980908+Zealith-Gamer@users.noreply.github.com> Date: Sat, 30 Mar 2024 03:35:42 +0000 (-0700) Subject: Stop items that are being pulled from spinning (#26504) X-Git-Url: https://git.smokeofanarchy.ru/gitweb.cgi?a=commitdiff_plain;h=39753892c2b7a86fb7a10480a32a9dd8252ce80f;p=space-station-14.git Stop items that are being pulled from spinning (#26504) * Fixed pulled items spinning when moved * edited out others issues * more reverts * requested fix * Removed "Optional:" --- diff --git a/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs b/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs index b347c6da16..acca7aafd0 100644 --- a/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs +++ b/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs @@ -269,7 +269,7 @@ public sealed class PullingSystem : EntitySystem } Dirty(player, pullerComp); - _throwing.TryThrow(pulled.Value, fromUserCoords, user: player, strength: 4f, animated: false, recoil: false, playSound: false); + _throwing.TryThrow(pulled.Value, fromUserCoords, user: player, strength: 4f, animated: false, recoil: false, playSound: false, doSpin: false); return false; } diff --git a/Content.Shared/Throwing/ThrowingSystem.cs b/Content.Shared/Throwing/ThrowingSystem.cs index 38772eaf34..7d94ada924 100644 --- a/Content.Shared/Throwing/ThrowingSystem.cs +++ b/Content.Shared/Throwing/ThrowingSystem.cs @@ -49,7 +49,8 @@ public sealed class ThrowingSystem : EntitySystem float pushbackRatio = PushbackDefault, bool recoil = true, bool animated = true, - bool playSound = true) + bool playSound = true, + bool doSpin = true) { var thrownPos = _transform.GetMapCoordinates(uid); var mapPos = _transform.ToMapCoordinates(coordinates); @@ -57,7 +58,7 @@ public sealed class ThrowingSystem : EntitySystem if (mapPos.MapId != thrownPos.MapId) return; - TryThrow(uid, mapPos.Position - thrownPos.Position, strength, user, pushbackRatio, recoil: recoil, animated: animated, playSound: playSound); + TryThrow(uid, mapPos.Position - thrownPos.Position, strength, user, pushbackRatio, recoil: recoil, animated: animated, playSound: playSound, doSpin: doSpin); } /// @@ -67,6 +68,7 @@ public sealed class ThrowingSystem : EntitySystem /// A vector pointing from the entity to its destination. /// How much the direction vector should be multiplied for velocity. /// The ratio of impulse applied to the thrower - defaults to 10 because otherwise it's not enough to properly recover from getting spaced + /// Whether spin will be applied to the thrown entity. public void TryThrow(EntityUid uid, Vector2 direction, float strength = 1.0f, @@ -74,7 +76,8 @@ public sealed class ThrowingSystem : EntitySystem float pushbackRatio = PushbackDefault, bool recoil = true, bool animated = true, - bool playSound = true) + bool playSound = true, + bool doSpin = true) { var physicsQuery = GetEntityQuery(); if (!physicsQuery.TryGetComponent(uid, out var physics)) @@ -90,7 +93,7 @@ public sealed class ThrowingSystem : EntitySystem projectileQuery, strength, user, - pushbackRatio, recoil: recoil, animated: animated, playSound: playSound); + pushbackRatio, recoil: recoil, animated: animated, playSound: playSound, doSpin: doSpin); } /// @@ -100,6 +103,7 @@ public sealed class ThrowingSystem : EntitySystem /// A vector pointing from the entity to its destination. /// How much the direction vector should be multiplied for velocity. /// The ratio of impulse applied to the thrower - defaults to 10 because otherwise it's not enough to properly recover from getting spaced + /// Whether spin will be applied to the thrown entity. public void TryThrow(EntityUid uid, Vector2 direction, PhysicsComponent physics, @@ -110,7 +114,8 @@ public sealed class ThrowingSystem : EntitySystem float pushbackRatio = PushbackDefault, bool recoil = true, bool animated = true, - bool playSound = true) + bool playSound = true, + bool doSpin = true) { if (strength <= 0 || direction == Vector2Helpers.Infinity || direction == Vector2Helpers.NaN || direction == Vector2.Zero) return; @@ -147,17 +152,20 @@ public sealed class ThrowingSystem : EntitySystem ThrowingAngleComponent? throwingAngle = null; // Give it a l'il spin. - if (physics.InvI > 0f && (!TryComp(uid, out throwingAngle) || throwingAngle.AngularVelocity)) + if (doSpin) { - _physics.ApplyAngularImpulse(uid, ThrowAngularImpulse / physics.InvI, body: physics); - } - else - { - Resolve(uid, ref throwingAngle, false); - var gridRot = _transform.GetWorldRotation(transform.ParentUid); - var angle = direction.ToWorldAngle() - gridRot; - var offset = throwingAngle?.Angle ?? Angle.Zero; - _transform.SetLocalRotation(uid, angle + offset); + if (physics.InvI > 0f && (!TryComp(uid, out throwingAngle) || throwingAngle.AngularVelocity)) + { + _physics.ApplyAngularImpulse(uid, ThrowAngularImpulse / physics.InvI, body: physics); + } + else + { + Resolve(uid, ref throwingAngle, false); + var gridRot = _transform.GetWorldRotation(transform.ParentUid); + var angle = direction.ToWorldAngle() - gridRot; + var offset = throwingAngle?.Angle ?? Angle.Zero; + _transform.SetLocalRotation(uid, angle + offset); + } } var throwEvent = new ThrownEvent(user, uid);