Skip to content

Commit

Permalink
Cherry-pick Tayrtahn's space-station-14#34016 (new-frontiers-14#2902)
Browse files Browse the repository at this point in the history
  • Loading branch information
whatston3 authored Feb 11, 2025
1 parent 04ecda5 commit 526bb26
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 18 deletions.
3 changes: 3 additions & 0 deletions Content.Client/Physics/Controllers/MoverController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,10 @@ public override void UpdateBeforeSolve(bool prediction, float frameTime)
return;

if (RelayQuery.TryGetComponent(player, out var relayMover))
{
HandleClientsideMovement(relayMover.RelayEntity, frameTime);
HandleRelayMovement(relayMover.RelayEntity); // Upstream - #34016
}

HandleClientsideMovement(player, frameTime);
}
Expand Down
12 changes: 10 additions & 2 deletions Content.Server/Physics/Controllers/MoverController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,8 @@ public override void UpdateBeforeSolve(bool prediction, float frameTime)
{
var physicsUid = uid;

if (RelayQuery.HasComponent(uid))
continue;
// if (RelayQuery.HasComponent(uid)) // Upstream - #34015
// continue; // Upstream - #34015

if (!XformQuery.TryGetComponent(uid, out var xform))
{
Expand Down Expand Up @@ -101,6 +101,14 @@ public override void UpdateBeforeSolve(bool prediction, float frameTime)
frameTime);
}

// Upstream - #34016
var movementRelayTargetEnumerator = AllEntityQuery<MovementRelayTargetComponent, InputMoverComponent>();
while (movementRelayTargetEnumerator.MoveNext(out var uid, out var relay, out var mover))
{
HandleRelayMovement((uid, relay, mover));
}
// End Upstream - #34016

HandleShuttleMovement(frameTime);
}

Expand Down
63 changes: 47 additions & 16 deletions Content.Shared/Movement/Systems/SharedMoverController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,34 @@ public override void UpdateAfterSolve(bool prediction, float frameTime)
UsedMobMovement.Clear();
}

// Upstream - #34016
protected void HandleRelayMovement(Entity<MovementRelayTargetComponent?, InputMoverComponent?> entity)
{
if (!Resolve(entity, ref entity.Comp1, ref entity.Comp2))
return;

var relayTarget = entity.Comp1;
var mover = entity.Comp2;

var canMove = true;

if (_mobState.IsIncapacitated(relayTarget.Source) ||
TryComp<SleepingComponent>(relayTarget.Source, out _) ||
!MoverQuery.TryGetComponent(relayTarget.Source, out var relayedMover))
{
canMove = false;
}
else
{
mover.RelativeEntity = relayedMover.RelativeEntity;
mover.RelativeRotation = relayedMover.RelativeRotation;
mover.TargetRelativeRotation = relayedMover.TargetRelativeRotation;
}

mover.CanMove = canMove;
}
// End Upstream - #34016

/// <summary>
/// Movement while considering actionblockers, weightlessness, etc.
/// </summary>
Expand All @@ -122,21 +150,23 @@ protected void HandleMobMovement(
float frameTime)
{
var canMove = mover.CanMove;
if (RelayTargetQuery.TryGetComponent(uid, out var relayTarget))
{
if (_mobState.IsIncapacitated(relayTarget.Source) ||
TryComp<SleepingComponent>(relayTarget.Source, out _) ||
!MoverQuery.TryGetComponent(relayTarget.Source, out var relayedMover))
{
canMove = false;
}
else
{
mover.RelativeEntity = relayedMover.RelativeEntity;
mover.RelativeRotation = relayedMover.RelativeRotation;
mover.TargetRelativeRotation = relayedMover.TargetRelativeRotation;
}
}
// Upstream - #34016
// if (RelayTargetQuery.TryGetComponent(uid, out var relayTarget))
// {
// if (_mobState.IsIncapacitated(relayTarget.Source) ||
// TryComp<SleepingComponent>(relayTarget.Source, out _) ||
// !MoverQuery.TryGetComponent(relayTarget.Source, out var relayedMover))
// {
// canMove = false;
// }
// else
// {
// mover.RelativeEntity = relayedMover.RelativeEntity;
// mover.RelativeRotation = relayedMover.RelativeRotation;
// mover.TargetRelativeRotation = relayedMover.TargetRelativeRotation;
// }
// }
// End Upstream - #34016

// Update relative movement
if (mover.LerpTarget < Timing.CurTime)
Expand Down Expand Up @@ -264,7 +294,8 @@ protected void HandleMobMovement(
.WithVariation(sound.Params.Variation ?? mobMover.FootstepVariation);

// If we're a relay target then predict the sound for all relays.
if (relayTarget != null)
// if (relayTarget != null) // Upstream - #34016
if (RelayTargetQuery.TryGetComponent(uid, out var relayTarget)) // Upstream - #34016
{
_audio.PlayPredicted(sound, uid, relayTarget.Source, audioParams);
}
Expand Down

0 comments on commit 526bb26

Please sign in to comment.