Multi-threaded mob movement (#12611)

This commit is contained in:
metalgearsloth
2022-11-30 09:41:26 +11:00
committed by GitHub
parent e923b15e27
commit d8bc7e1cb7
5 changed files with 242 additions and 105 deletions

View File

@@ -1,11 +1,14 @@
using Content.Shared.Inventory;
using Content.Shared.Movement.Components;
using Content.Shared.Movement.Systems;
using Content.Shared.Pulling.Components;
using Robust.Client.GameObjects;
using Robust.Client.Player;
using Robust.Shared.Containers;
using Robust.Shared.Physics;
using Robust.Shared.Physics.Components;
using Robust.Shared.Timing;
using Robust.Shared.Utility;
namespace Content.Client.Physics.Controllers
{
@@ -134,8 +137,30 @@ namespace Content.Client.Physics.Controllers
}
}
var mobQuery = GetEntityQuery<MobMoverComponent>();
var inventoryQuery = GetEntityQuery<InventoryComponent>();
var containerQuery = GetEntityQuery<ContainerManagerComponent>();
var footQuery = GetEntityQuery<FootstepModifierComponent>();
DebugTools.Assert(!UsedMobMovement.ContainsKey(mover.Owner));
// Server-side should just be handled on its own so we'll just do this shizznit
HandleMobMovement(mover, body, xformMover, frameTime, xformQuery);
HandleMobMovement(mover, body, xformMover, frameTime, xformQuery, mobQuery, inventoryQuery, containerQuery, footQuery, out var dirtyMover, out var linearVelocity, out var sound, out var audio);
MetaDataComponent? metadata = null;
if (dirtyMover)
{
Dirty(mover, metadata);
}
if (linearVelocity != null)
{
PhysicsSystem.SetLinearVelocity(body, linearVelocity.Value, false);
PhysicsSystem.SetAngularVelocity(body, 0f, false);
Dirty(body, metadata);
}
Audio.PlayPredicted(sound, mover.Owner, mover.Owner, audio);
}
protected override bool CanSound()