]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Fix jetpack assert (#14752)
authormetalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Wed, 22 Mar 2023 04:58:53 +0000 (15:58 +1100)
committerGitHub <noreply@github.com>
Wed, 22 Mar 2023 04:58:53 +0000 (15:58 +1100)
Content.Client/Physics/Controllers/MoverController.cs
Content.Server/Physics/Controllers/MoverController.cs
Content.Shared/Movement/Systems/SharedMoverController.cs

index 926d88fb0c873f20bef482c0b850449ab1522aca..2d589da0dda982fbf103e7d4431888e08d7b9297 100644 (file)
@@ -75,8 +75,9 @@ namespace Content.Client.Physics.Controllers
                 return;
             }
 
+            var physicsUid = player;
             PhysicsComponent? body;
-            TransformComponent? xformMover = xform;
+            var xformMover = xform;
 
             if (mover.ToParent && HasComp<RelayInputMoverComponent>(xform.ParentUid))
             {
@@ -85,6 +86,8 @@ namespace Content.Client.Physics.Controllers
                 {
                     return;
                 }
+
+                physicsUid = xform.ParentUid;
             }
             else if (!TryComp(player, out body))
             {
@@ -128,7 +131,7 @@ namespace Content.Client.Physics.Controllers
             }
 
             // Server-side should just be handled on its own so we'll just do this shizznit
-            HandleMobMovement(player, mover, body, xformMover, frameTime, xformQuery, moverQuery, relayTargetQuery);
+            HandleMobMovement(player, mover, physicsUid, body, xformMover, frameTime, xformQuery, moverQuery, relayTargetQuery);
         }
 
         protected override bool CanSound()
index c27bbdfe53c9650de6df503f194d0b3333f4e7a4..a202c44784d0d7d65e8b5979c897f263ec0ac0b0 100644 (file)
@@ -69,6 +69,8 @@ namespace Content.Server.Physics.Controllers
             foreach (var mover in EntityQuery<InputMoverComponent>(true))
             {
                 var uid = mover.Owner;
+                EntityUid physicsUid = uid;
+
                 if (relayQuery.HasComponent(uid))
                     continue;
 
@@ -87,13 +89,15 @@ namespace Content.Server.Physics.Controllers
                     {
                         continue;
                     }
+
+                    physicsUid = xform.ParentUid;
                 }
                 else if (!bodyQuery.TryGetComponent(uid, out body))
                 {
                     continue;
                 }
 
-                HandleMobMovement(uid, mover, body, xformMover, frameTime, xformQuery, moverQuery, relayTargetQuery);
+                HandleMobMovement(uid, mover, physicsUid, body, xformMover, frameTime, xformQuery, moverQuery, relayTargetQuery);
             }
 
             HandleShuttleMovement(frameTime);
index 932654aa145d78819a32151e895c628a58bbf12f..6bd64e89ab597c84590278ef40b0f75e133a5e11 100644 (file)
@@ -102,6 +102,7 @@ namespace Content.Shared.Movement.Systems
         protected void HandleMobMovement(
             EntityUid uid,
             InputMoverComponent mover,
+            EntityUid physicsUid,
             PhysicsComponent physicsComponent,
             TransformComponent xform,
             float frameTime,
@@ -230,7 +231,7 @@ namespace Content.Shared.Movement.Systems
 
             UsedMobMovement[uid] = true;
             // Specifically don't use mover.Owner because that may be different to the actual physics body being moved.
-            var weightless = _gravity.IsWeightless(uid, physicsComponent, xform);
+            var weightless = _gravity.IsWeightless(physicsUid, physicsComponent, xform);
             var (walkDir, sprintDir) = GetVelocityInput(mover);
             var touching = false;
 
@@ -336,10 +337,10 @@ namespace Content.Shared.Movement.Systems
             if (!weightless || touching)
                 Accelerate(ref velocity, in worldTotal, accel, frameTime);
 
-            PhysicsSystem.SetLinearVelocity(uid, velocity, body: physicsComponent);
+            PhysicsSystem.SetLinearVelocity(physicsUid, velocity, body: physicsComponent);
 
             // Ensures that players do not spiiiiiiin
-            PhysicsSystem.SetAngularVelocity(uid, 0, body: physicsComponent);
+            PhysicsSystem.SetAngularVelocity(physicsUid, 0, body: physicsComponent);
         }
 
         private void Friction(float minimumFrictionSpeed, float frameTime, float friction, ref Vector2 velocity)