diff --git a/Robust.Shared/Physics/Systems/FixturesChangeSystem.cs b/Robust.Shared/Physics/Systems/FixturesChangeSystem.cs index b70a4d6626f..bfdc432854b 100644 --- a/Robust.Shared/Physics/Systems/FixturesChangeSystem.cs +++ b/Robust.Shared/Physics/Systems/FixturesChangeSystem.cs @@ -9,15 +9,23 @@ public sealed class FixturesChangeSystem : EntitySystem [Dependency] private readonly FixtureSystem _fixtures = default!; [Dependency] private readonly SharedPhysicsSystem _physics = default!; + private EntityQuery _fixturesQuery; + private EntityQuery _physicsQuery; + public override void Initialize() { base.Initialize(); + _fixturesQuery = GetEntityQuery(); + _physicsQuery = GetEntityQuery(); SubscribeLocalEvent(OnChangeStartup); SubscribeLocalEvent(OnChangeShutdown); } private void OnChangeStartup(Entity ent, ref ComponentStartup args) { + if (!_physicsQuery.TryComp(ent, out var physics) || !_fixturesQuery.TryComp(ent, out var fixtures)) + return; + foreach (var (id, fixture) in ent.Comp.Fixtures) { _fixtures.TryCreateFixture(ent.Owner, @@ -28,11 +36,13 @@ private void OnChangeStartup(Entity ent, ref ComponentS fixture.CollisionLayer, fixture.CollisionMask, fixture.Friction, - fixture.Restitution); + fixture.Restitution, + manager: fixtures, + body: physics); } // TODO: Fixture creation should be handling this. - _physics.WakeBody(ent.Owner); + _physics.WakeBody(ent.Owner, manager: fixtures, body: physics); } private void OnChangeShutdown(Entity ent, ref ComponentShutdown args)