From 5823e47442373994350ba2ca1234bddbfada3988 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Wed, 22 Mar 2023 15:58:53 +1100 Subject: [PATCH] Fix jetpack assert (#14752) --- Content.Client/Physics/Controllers/MoverController.cs | 7 +++++-- Content.Server/Physics/Controllers/MoverController.cs | 6 +++++- Content.Shared/Movement/Systems/SharedMoverController.cs | 7 ++++--- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/Content.Client/Physics/Controllers/MoverController.cs b/Content.Client/Physics/Controllers/MoverController.cs index 926d88fb0c..2d589da0dd 100644 --- a/Content.Client/Physics/Controllers/MoverController.cs +++ b/Content.Client/Physics/Controllers/MoverController.cs @@ -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(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() diff --git a/Content.Server/Physics/Controllers/MoverController.cs b/Content.Server/Physics/Controllers/MoverController.cs index c27bbdfe53..a202c44784 100644 --- a/Content.Server/Physics/Controllers/MoverController.cs +++ b/Content.Server/Physics/Controllers/MoverController.cs @@ -69,6 +69,8 @@ namespace Content.Server.Physics.Controllers foreach (var mover in EntityQuery(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); diff --git a/Content.Shared/Movement/Systems/SharedMoverController.cs b/Content.Shared/Movement/Systems/SharedMoverController.cs index 932654aa14..6bd64e89ab 100644 --- a/Content.Shared/Movement/Systems/SharedMoverController.cs +++ b/Content.Shared/Movement/Systems/SharedMoverController.cs @@ -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) -- 2.52.0