diff --git a/Content.Client/Physics/Controllers/MoverController.cs b/Content.Client/Physics/Controllers/MoverController.cs index 6a75df3364..51292f767b 100644 --- a/Content.Client/Physics/Controllers/MoverController.cs +++ b/Content.Client/Physics/Controllers/MoverController.cs @@ -24,8 +24,6 @@ namespace Content.Client.Physics.Controllers { if (relayMover.RelayEntity != null) HandleClientsideMovement(relayMover.RelayEntity.Value, frameTime); - - return; } HandleClientsideMovement(player, frameTime); @@ -34,13 +32,26 @@ namespace Content.Client.Physics.Controllers private void HandleClientsideMovement(EntityUid player, float frameTime) { if (!TryComp(player, out InputMoverComponent? mover) || - !TryComp(player, out TransformComponent? xform)) return; + !TryComp(player, out TransformComponent? xform)) + { + return; + } PhysicsComponent? body = null; + TransformComponent? xformMover = xform; if (mover.ToParent && HasComp(xform.ParentUid)) { - if (!TryComp(xform.ParentUid, out body)) return; + if (!TryComp(xform.ParentUid, out body) || + !TryComp(xform.ParentUid, out xformMover)) + { + return; + } + + if (TryComp(xform.ParentUid, out var parentMover)) + { + mover.LastGridAngle = parentMover.LastGridAngle; + } } else if (!TryComp(player, out body)) { @@ -84,7 +95,7 @@ namespace Content.Client.Physics.Controllers } // Server-side should just be handled on its own so we'll just do this shizznit - HandleMobMovement(mover, body, xform, frameTime); + HandleMobMovement(mover, body, xformMover, frameTime); } protected override Filter GetSoundPlayers(EntityUid mover) diff --git a/Content.Server/Physics/Controllers/MoverController.cs b/Content.Server/Physics/Controllers/MoverController.cs index e304169000..8fc3787b93 100644 --- a/Content.Server/Physics/Controllers/MoverController.cs +++ b/Content.Server/Physics/Controllers/MoverController.cs @@ -36,23 +36,33 @@ namespace Content.Server.Physics.Controllers foreach (var (mover, xform) in EntityQuery(true)) { - if (relayQuery.TryGetComponent(mover.Owner, out var relayed) && relayed != null) + if (relayQuery.TryGetComponent(mover.Owner, out var relayed) && relayed.RelayEntity != null) { continue; } PhysicsComponent? body = null; + TransformComponent? xformMover = xform; if (mover.ToParent && relayQuery.HasComponent(xform.ParentUid)) { - if (!bodyQuery.TryGetComponent(xform.ParentUid, out body)) continue; + if (!bodyQuery.TryGetComponent(xform.ParentUid, out body) || + !TryComp(xform.ParentUid, out xformMover)) + { + continue; + } + + if (TryComp(xform.ParentUid, out var parentMover)) + { + mover.LastGridAngle = parentMover.LastGridAngle; + } } else if (!bodyQuery.TryGetComponent(mover.Owner, out body)) { continue; } - HandleMobMovement(mover, body, xform, frameTime); + HandleMobMovement(mover, body, xformMover, frameTime); } HandleShuttleMovement(frameTime); diff --git a/Content.Shared/Movement/Systems/SharedJetpackSystem.cs b/Content.Shared/Movement/Systems/SharedJetpackSystem.cs index aed081fe34..8d8cdb3fa5 100644 --- a/Content.Shared/Movement/Systems/SharedJetpackSystem.cs +++ b/Content.Shared/Movement/Systems/SharedJetpackSystem.cs @@ -114,7 +114,8 @@ public abstract class SharedJetpackSystem : EntitySystem private void OnJetpackToggle(EntityUid uid, JetpackComponent component, ToggleJetpackEvent args) { - if (args.Handled) return; + if (args.Handled) + return; if (TryComp(uid, out var xform) && !CanEnableOnGrid(xform.GridUid)) { @@ -130,8 +131,7 @@ public abstract class SharedJetpackSystem : EntitySystem private bool CanEnableOnGrid(EntityUid? gridUid) { return gridUid == null || - (TryComp(gridUid, out var gravity) && - !gravity.Enabled); + (!HasComp(gridUid)); } private void OnJetpackGetAction(EntityUid uid, JetpackComponent component, GetItemActionsEvent args) diff --git a/Content.Shared/Movement/Systems/SharedMoverController.cs b/Content.Shared/Movement/Systems/SharedMoverController.cs index e9f1116c3c..984f8324bd 100644 --- a/Content.Shared/Movement/Systems/SharedMoverController.cs +++ b/Content.Shared/Movement/Systems/SharedMoverController.cs @@ -114,7 +114,8 @@ namespace Content.Shared.Movement.Systems } UsedMobMovement[mover.Owner] = true; - var weightless = _gravity.IsWeightless(mover.Owner, physicsComponent, xform); + // Specifically don't use mover.Owner because that may be different to the actual physics body being moved. + var weightless = _gravity.IsWeightless(physicsComponent.Owner, physicsComponent, xform); var (walkDir, sprintDir) = GetVelocityInput(mover); var touching = false;