Try fix collision mispredicts (#16298)
This commit is contained in:
@@ -30,6 +30,7 @@ namespace Content.Shared.Movement.Systems
|
||||
{
|
||||
[Dependency] private readonly IConfigurationManager _configManager = default!;
|
||||
[Dependency] protected readonly IGameTiming Timing = default!;
|
||||
[Dependency] protected readonly SharedPhysicsSystem Physics = default!;
|
||||
[Dependency] private readonly IMapManager _mapManager = default!;
|
||||
[Dependency] private readonly ITileDefinitionManager _tileDefinitionManager = default!;
|
||||
[Dependency] private readonly InventorySystem _inventory = default!;
|
||||
@@ -108,25 +109,19 @@ namespace Content.Shared.Movement.Systems
|
||||
EntityQuery<MovementSpeedModifierComponent> modifierQuery)
|
||||
{
|
||||
var canMove = mover.CanMove;
|
||||
if (relayTargetQuery.TryGetComponent(uid, out var relayTarget) && relayTarget.Entities.Count > 0)
|
||||
if (relayTargetQuery.TryGetComponent(uid, out var relayTarget))
|
||||
{
|
||||
DebugTools.Assert(relayTarget.Entities.Count <= 1, "Multiple relayed movers are not supported at the moment");
|
||||
|
||||
var found = false;
|
||||
foreach (var ent in relayTarget.Entities)
|
||||
if (_mobState.IsIncapacitated(relayTarget.Source) ||
|
||||
!moverQuery.TryGetComponent(relayTarget.Source, out var relayedMover))
|
||||
{
|
||||
canMove = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_mobState.IsIncapacitated(ent) || !moverQuery.TryGetComponent(ent, out var relayedMover))
|
||||
continue;
|
||||
|
||||
found = true;
|
||||
mover.RelativeEntity = relayedMover.RelativeEntity;
|
||||
mover.RelativeRotation = relayedMover.RelativeRotation;
|
||||
mover.TargetRelativeRotation = relayedMover.TargetRelativeRotation;
|
||||
break;
|
||||
}
|
||||
|
||||
// lets just hope that this is the same entity that set the movement keys/direction.
|
||||
canMove &= found;
|
||||
}
|
||||
|
||||
// Update relative movement
|
||||
@@ -267,10 +262,7 @@ namespace Content.Shared.Movement.Systems
|
||||
// If we're a relay target then predict the sound for all relays.
|
||||
if (relayTarget != null)
|
||||
{
|
||||
foreach (var ent in relayTarget.Entities)
|
||||
{
|
||||
_audio.PlayPredicted(sound, uid, ent, audioParams);
|
||||
}
|
||||
_audio.PlayPredicted(sound, uid, relayTarget.Source, audioParams);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user