Fix a bunch of mover bugs (#9999)

* Fix a bunch of mover bugs

Just regressions from random things

* Fix vehicle movement I guess
This commit is contained in:
metalgearsloth
2022-07-25 14:16:24 +10:00
committed by GitHub
parent ed068b166f
commit dad26db137
4 changed files with 34 additions and 12 deletions

View File

@@ -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<RelayInputMoverComponent>(xform.ParentUid))
{
if (!TryComp(xform.ParentUid, out body)) return;
if (!TryComp(xform.ParentUid, out body) ||
!TryComp(xform.ParentUid, out xformMover))
{
return;
}
if (TryComp<InputMoverComponent>(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)

View File

@@ -36,23 +36,33 @@ namespace Content.Server.Physics.Controllers
foreach (var (mover, xform) in EntityQuery<InputMoverComponent, TransformComponent>(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<InputMoverComponent>(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);

View File

@@ -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<TransformComponent>(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<GravityComponent>(gridUid, out var gravity) &&
!gravity.Enabled);
(!HasComp<GravityComponent>(gridUid));
}
private void OnJetpackGetAction(EntityUid uid, JetpackComponent component, GetItemActionsEvent args)

View File

@@ -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;