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) if (relayMover.RelayEntity != null)
HandleClientsideMovement(relayMover.RelayEntity.Value, frameTime); HandleClientsideMovement(relayMover.RelayEntity.Value, frameTime);
return;
} }
HandleClientsideMovement(player, frameTime); HandleClientsideMovement(player, frameTime);
@@ -34,13 +32,26 @@ namespace Content.Client.Physics.Controllers
private void HandleClientsideMovement(EntityUid player, float frameTime) private void HandleClientsideMovement(EntityUid player, float frameTime)
{ {
if (!TryComp(player, out InputMoverComponent? mover) || if (!TryComp(player, out InputMoverComponent? mover) ||
!TryComp(player, out TransformComponent? xform)) return; !TryComp(player, out TransformComponent? xform))
{
return;
}
PhysicsComponent? body = null; PhysicsComponent? body = null;
TransformComponent? xformMover = xform;
if (mover.ToParent && HasComp<RelayInputMoverComponent>(xform.ParentUid)) 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)) 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 // 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) 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)) 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; continue;
} }
PhysicsComponent? body = null; PhysicsComponent? body = null;
TransformComponent? xformMover = xform;
if (mover.ToParent && relayQuery.HasComponent(xform.ParentUid)) 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)) else if (!bodyQuery.TryGetComponent(mover.Owner, out body))
{ {
continue; continue;
} }
HandleMobMovement(mover, body, xform, frameTime); HandleMobMovement(mover, body, xformMover, frameTime);
} }
HandleShuttleMovement(frameTime); HandleShuttleMovement(frameTime);

View File

@@ -114,7 +114,8 @@ public abstract class SharedJetpackSystem : EntitySystem
private void OnJetpackToggle(EntityUid uid, JetpackComponent component, ToggleJetpackEvent args) 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)) if (TryComp<TransformComponent>(uid, out var xform) && !CanEnableOnGrid(xform.GridUid))
{ {
@@ -130,8 +131,7 @@ public abstract class SharedJetpackSystem : EntitySystem
private bool CanEnableOnGrid(EntityUid? gridUid) private bool CanEnableOnGrid(EntityUid? gridUid)
{ {
return gridUid == null || return gridUid == null ||
(TryComp<GravityComponent>(gridUid, out var gravity) && (!HasComp<GravityComponent>(gridUid));
!gravity.Enabled);
} }
private void OnJetpackGetAction(EntityUid uid, JetpackComponent component, GetItemActionsEvent args) private void OnJetpackGetAction(EntityUid uid, JetpackComponent component, GetItemActionsEvent args)

View File

@@ -114,7 +114,8 @@ namespace Content.Shared.Movement.Systems
} }
UsedMobMovement[mover.Owner] = true; 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 (walkDir, sprintDir) = GetVelocityInput(mover);
var touching = false; var touching = false;