Try fix collision mispredicts (#16298)

This commit is contained in:
Leon Friedrich
2023-05-13 02:02:50 +12:00
committed by GitHub
parent f1a81d9a8d
commit d228f971b0
11 changed files with 134 additions and 214 deletions

View File

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